Json没有正确反序列化为类

时间:2019-01-29 16:21:29

标签: c# json .net-core json.net

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

我收到此错误:

  

JsonSerializationException:无法反序列化当前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。

有人看到有什么问题吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

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

例如,

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

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

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

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

您可以了解有关Json阵列here

的更多信息

答案 1 :(得分:3)

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

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

T => T []