代码之家  ›  专栏  ›  技术社区  ›  SkyeBoniwell

Json未正确反序列化到类中

  •  -1
  • SkyeBoniwell  · 技术社区  · 7 年前

    我正在尝试将数组转换为类。因此,我获取数组,然后使用JsonConvert对其进行序列化,如下所示:

    var gameResponse = GetGame(Id);
    var returnedArray = gameResponse.Result.Results;
    var json = JsonConvert.SerializeObject(returnedArray);
    var result = JsonConvert.DeserializeObject<T>(json);
    

    我可以在Visual Studio调试模式下看到这一结果,“json”如下所示:

    [
      { 
        \"CreatorId\":\"41c5321e-6f37-4d4f-92f7-fc381be0fc62\",
        \"GameId\": \"3938\",
        \"Type\": \"2\",
        \"CreateDate\": \"1/2/2017\",
        \"TeamId\": \"2394\",
        \"LeaderId\": \"34922\",
        \"CountryCode\": \"23\",
        \"SalesRank\": \"4\",
        \"Title\": \"Space Shooter Max\",
        \"TeamName\": \"The One\",
        \"TeamMembers\" : \"4\"
      }
    ]
    

    var result = JsonConvert.DeserializeObject<T>(json);  // In this case, <T> is <Game>
    

    我得到这个错误:

    (例如[1,2,3])转换为类型“GameLabs.Game”,因为该类型需要 JSON对象(例如{“name”:“value”})以正确反序列化。

    GameLabs.Game是一个如下所示的类:

    public sealed class Game
    {
        public string CreatorId { get; set; }
        public string GameId { get; set; }
        public string Title { get; set; }
        public DateTime CreateDate { get; set; }
        public string CountryCode { get; set; }
    }
    

    有人看到什么不对劲吗?

    谢谢

    2 回复  |  直到 7 年前
        1
  •  5
  •   Anu Viswan    7 年前

    如果检查JSON,它不是单个对象,而是一个集合。“[…]”表示集合。

    例如

    [ "Ford", "BMW", "Fiat" ] 
    

    上面的Json表示一个包含3个元素的字符串数组。这也类似于Json。

    因此,您还需要将Json反序列化到集合。

    var result = JsonConvert.DeserializeObject<List<T>>(str);
    

    here

        2
  •  3
  •   Mixim    7 年前

    正如我所看到的,您的JSON是数组,您应该这样写:

    var result = JsonConvert.DeserializeObject<T[]>(json);
    

    T=>T[]