如何反序列化JSON字符串

本文关键字:字符串 JSON 反序列化 | 更新日期: 2023-09-27 18:28:27

我正在尝试为下面的JSON字符串创建一个模型,该字符串具有如下所示的动态列

[{"DId":0,"DData":[{"Date":"","C0":{"D":"National","Id":"National"},"C1":{"D":"National","Id":"National"},"C2":{"D":"National","Id":"National"}},{"Date":"1/2/2010","C0":{"D":0.74,"Id":1334337,"Dirty":"False"},"C1":{"D":0.6,"Id":1334597,"Dirty":"False"},"C2":{"D":1,"Id":1334857,"Dirty":"False"}}]}]

正如我强调的列(C*),它们是动态的,例如,我可以有如下JSON,其中我只有两列

[{"DId":0,"DData":[{"Date":"","C0":{"D":"National","Id":"National"},"C1":{"D":"National","Id":"National"}},{"Date":"1/2/2010","C0":{"D":0.74,"Id":1334337,"Dirty":"False"},"C1":{"D":0.6,"Id":1334597,"Dirty":"False"}}]}]

C0、C1、C2。。。。是动态的

我正在尝试构建一个通用模型来反序列化我的JSON字符串。现在我有我的模型如下

public class C0
{
    public object D { get; set; }
    public object Id { get; set; }
    public string Dirty { get; set; }
}
public class C1
{
    public object D { get; set; }
    public object Id { get; set; }
    public string Dirty { get; set; }
}
public class C2
{
    public object D { get; set; }
    public object Id { get; set; }
    public string Dirty { get; set; }
}
public class DData
{
    public string Date { get; set; }
    public C0 C0 { get; set; }
    public C1 C1 { get; set; }
    public C2 C2 { get; set; }
}
public class Model
{
    public int DId { get; set; }
    public List<DData> DData { get; set; }
}

如上所述,分布数据可以具有动态列。任何帮助我都非常感激。非常感谢。

如何反序列化JSON字符串

秘诀是保持反序列化JSON的最通用形式:

Dictionary<string, object> theData= new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(jsonString);
System.Collections.ArrayList dData= (System.Collections.ArrayList)theData["DData"];
foreach (Dictionary<string, object> data in dData)
{
 string date = (string)data["Date"];
 Dictionary<string, object> cZeroNode = (Dictionary<string, object>)data["C0"];
 string d = (string)cZeroNode["D"];
 string id = (string)cZeroNode["Id"];
}

Deserialize()的调用创建了一个Dictionary<string, object>树,您可以随意遍历它。