c#中转换Json的正确类结构是什么?

本文关键字:结构 是什么 转换 Json | 更新日期: 2023-09-27 18:12:27

我有下面的Json来自一个Rest服务,我试图用这个代码将它反序列化成一个c#对象:

 var _deserializer = new JsonDeserializer();
 var results = _deserializer.Deserialize<Report>(restResponse);

反序列化方法一直返回null,这告诉我c#对象的结构不正确。

下面是Json和我对c#定义的最新尝试。

{
    "Report": [
        {
            "ID": "0000014",
            "Age": "45",
            "Details": [
                {
                    "Status": "Approved",
                    "Name": "Joe"
                },
                {
                    "Status": "Approved",
                    "Name": "Bill"
                },
                {
                    "Status": "Submitted",
                    "Name": "Scott"
                }
            ]
        },
        {
            "ID": "10190476",
            "Age": "40",
            "Details": [
                {
                    "Status": "Approved",
                    "Name": "Scott"
                }
            ]
        },
        {
            "ID": "10217480",
            "Age": "40",
            "Details": [
                {
                    "Status": "Approved",
                    "Name": "Scott"
                }
            ]
        }
    ]
}
这是我的c#对象:
public class Report
{
    public List<WorkItem> Item= new List<WorkItem>(); 
}
public class WorkItem
{
    public string ID { get; set; }
    public int Age { get; set; }
    public List<Details> Details { get; set; }
}
public class Details
{
    public string Status { get; set; }
    public string Name { get; set; }
}

有人可以建议什么是错误的我的c#对象定义,使这个json反序列化正确?

c#中转换Json的正确类结构是什么?

我建议使用Json2Csharp.com来生成类。

public class Detail
{
    public string Status { get; set; }
    public string Name { get; set; }
}
public class Report
{
    public string ID { get; set; }
    public string Age { get; set; }
    public List<Detail> Details { get; set; }
}
public class RootObject
{
    public List<Report> Report { get; set; }
}

尝试像这样改变Report类(类名可以是任何东西,属性必须是Report)

public class WorkReport
{
    public List<WorkItem> Report;
}

它应该尝试在根处反序列化为一个类,该类包含一个名为Report的工作项对象的数组/列表。

您可以尝试这样做。我已将List更改为Dictionary。您没有在根级别定义类。类结构需要匹配整个JSON,不能只从中间进行反序列化。每当有一个键可以更改的对象时,就需要使用Dictionary。普通的课程是做不到这一点的;List也不会。

public class RootObject
{
    [JsonProperty("Report")]
    public Report Reports { get; set; }
}
public class Report
{
    [JsonProperty("Report")]
    public Dictionary<WorkItem> Item;
}
public class WorkItem
{
    [JsonProperty("ID")]
    public string ID { get; set; }
    [JsonProperty("Age")]
    public int Age { get; set; }
    [JsonProperty("Details")]
    public Dictionary<Details> Details { get; set; }
}
public class Details
{
    [JsonProperty("Status")]
    public string Status { get; set; }
    [JsonProperty("Name")]
    public string Name { get; set; }
}

然后,像这样反序列化:

Report results = _deserializer.Deserialize<Report>(restResponse);