c# - 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>
我收到此错误:
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。
有人看到有什么不对吗?
谢谢!
解决方案
如果您检查 JSON,它不是单个对象,而是一个集合。“[..]”表示一个集合。
例如,
[ "Ford", "BMW", "Fiat" ]
上面的 Json 暗示了一个包含 3 个元素的字符串数组。这也类似于您的 Json。
因此,您还需要将您的 Json 反序列化为 Collection。
var result = JsonConvert.DeserializeObject<List<T>>(str);
您可以在此处阅读有关 Json 数组的更多信息
推荐阅读
- javascript - 使用 AJAX 预填充 Django Select 表单
- python - 如何使用 Tensorflow 估计器对保存的模型进行评分?
- python-3.x - 对象不可迭代。我怎样才能使这个代码工作
- laravel - Laravel 身份验证生命周期
- aem - AEM 在 DAM 中搜索文件
- node.js - 没有 SSH 的情况下,像“Localtunnel”这样的隧道服务如何工作?
- json - 如何将 angular.json 保存为 UTF-8?
- sql - SQL:使用 chr(10) 或 chr(13) 对列进行 LIKE 查询
- windows - 如何在 Windows 上安装primer3?
- assembly - 系统调用在 shellcode 中的使用