使用Newtonsoft反序列化JSON,使用特定的类。
使用Newtonsoft反序列化JSON,使用特定的类。
我知道关于如何做这件事有很多问题...
我从一个API中得到了一个相当复杂的JSON,并且我正在努力理清它。我简化了JSON答案,以便它包含一个潜在的问题。
简化的JSON答案
{"data":[{"type":"task","id":"10118"},{"type":"task","id":"10004"}]}
我要用于反序列化的类
namespace TestJsonDeserializeApp { class jsonTask { public List data { get; set; } public class Data { public string id { get; set; } public string type { get; set; } } } }
我想要如何进行反序列化
Listtest = JsonConvert.DeserializeObject >(strJSON);
最后我得到的错误消息
无法将当前的JSON对象(例如{"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[TestJsonDeserializeApp.jsonTask]',因为该类型需要一个JSON数组(例如[1,2,3])才能正确反序列化。
要修复此错误,要么将JSON更改为JSON数组(例如[1,2,3]),要么更改反序列化类型,使其成为一个普通的.NET类型(例如不是像整数这样的原始类型,也不是像数组或List这样的集合类型),可以从JSON对象反序列化。也可以为类型添加JsonObjectAttribute,以强制从JSON对象反序列化。
路径'data',行1,位置8。
你们中的一个人可以告诉我如何编写jsonTask类以适应JSON输入的结构吗?
问题出现的原因是需要将JSON字符串反序列化为特定的类对象。解决方法是使用Newtonsoft库中的JsonConvert类进行反序列化操作。
首先,我们需要复制JSON字符串,并在Visual Studio中创建一个新的C#类文件。然后,选择下面的菜单选项:
Edit > Paste Special > Paste JSON as classes
这将创建一个类,如下所示:
public class Rootobject { public Datum[] data { get; set; } } public class Datum { public string type { get; set; } public string id { get; set; } }
接下来,将RootObject更改为jsonTask,并按以下方式进行反序列化:
jsonTask test = JsonConvert.DeserializeObject(strJSON);
通过以上步骤,我们成功地将JSON字符串反序列化为特定的类对象。使用JsonConvert.DeserializeObject方法可以轻松地将JSON数据转换为C#对象。这样,我们可以方便地访问和操作JSON数据。
希望以上内容能帮助到您!
Deserializing JSON with Newtonsoft, using a specific class
在使用Newtonsoft进行JSON反序列化时,使用特定类的问题
问题的出现原因:
在代码中,将strJSON强制转换为List列表的形式,但实际上不需要再添加外层列表,因为jsonTask已经有了public List data { get; set; }属性。
解决方法:
尝试使用以下代码进行反序列化:
jsonTask test = JsonConvert.DeserializeObject(strJSON);
这样就可以正确地将JSON字符串反序列化为jsonTask对象,而不再需要额外的列表。