将此 Json 转换为 C# 中正确的 class 结构是什么?

What is the correct class structure in C# to convert this Json into?

我有以下来自 Rest 服务的 Json,我正在尝试使用此代码将其反序列化为 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 正确反序列化?

尝试像这样更改报告 class(class 名称可以是任何名称,属性 必须是报告)

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

它应该尝试在根目录反序列化为一个 class 和一个名为 Report 的 array/list 个工作项对象。

你可以尝试这样的事情。我已将 List 更改为 Dictionary 您没有在根级别定义 class。 class结构需要匹配整个JSON,不能只从中间反序列化。只要你有一个对象的键可以改变,你就需要使用字典。普通的 class 对此不起作用;列表也不会。

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);

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