使用Newtonsoft反序列化JSON,使用特定的类。

23 浏览
0 Comments

使用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; }
        }
    }
}

我想要如何进行反序列化

List test = 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输入的结构吗?

0
0 Comments

问题出现的原因是需要将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数据。

希望以上内容能帮助到您!

0
0 Comments

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对象,而不再需要额外的列表。

0