Json 未正确反序列化为类



我正在尝试将数组转换为类。所以我得到了数组,然后使用 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>

我收到此错误:

Json序列化异常:无法反序列化当前 JSON 数组 (例如 [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; }
}

我不确定为什么它不接受 JSON。

有人看出什么问题吗?

谢谢!

如果你检查你的 JSON,它不是一个对象,而是一个集合。"[..]"表示集合。

例如

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

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

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

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

您可以在此处阅读有关 Json 数组的更多信息

正如我所看到的,你的JSON是数组,你应该这样写一些想法:

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

T=>T[]

相关内容

  • 没有找到相关文章