【发布时间】:2017-11-29 15:22:39
【问题描述】:
我有一个有效的 JSON 对象,其中包含一个 JSON 数组。 JSON 数组没有大括号,其中包含一个逗号分隔的混合类型列表。它看起来像这样:
{
"ID": 17,
"Days": 979,
"Start_Date": "10/13/2012",
"End_Date": "11/12/2012",
"State": "",
"Page": 1,
"Test": "Valid",
"ROWS": [
[441210, "A", "12/31/2009", "OK", "Done", "KELLEY and Co'", "12/31/2009", "06/29/2010", "TEXAS", "Lawyers", 6, "", "<img src=\"/includes/images/Icon_done.gif\" border=\"0\" alt=\"Done\" title=\"Done\" />"],
[441151, "B", "12/31/2009", "No", "In-process", "Sage & Co", "12/31/2009", "06/29/2010", "CALIFORNIA", "Realtor", 6, "", "<img src=\"/includes/images/Icon_InProcess.gif\" border=\"0\" alt=\"In Process\" title=\"In Process\" />"]
]
}
我创建了一个类来反映 JSON 结构,其中包含一个复杂数组的列表:
class myModel
{
public int ID { get; set; }
public int Days { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string State { get; set; }
public string Page { get; set; }
public string Test { get; set; }
List<ChildModel> Rows { get; set; }
}
我也用 List of a List 对其进行了测试:
List<List<ChildModel>> Rows { get; set; }
还有这样的子模型:
class ChildModel
{
public int ID { get; set; }
public string StatusId { get; set; }
public DateTime ContactDate { get; set; }
public string State { get; set; }
public string Status { get; set; }
public string CustomerName { get; set; }
public DateTime WorkStartDate { get; set; }
public DateTime WorkEndDate { get; set; }
public string Territory { get; set; }
public string CustType { get; set; }
public int JobOrder { get; set; }
public string Filler { get; set; }
public string Link { get; set; }
}
在我的 program.cs 文件中,我像这样反序列化它:
using (StreamReader r = new StreamReader(@"D:\01.json"))
{
myModel items = JsonConvert.DeserializeObject<myModel>(r.ReadToEnd());
}
当我运行这个程序时,子对象(行)总是null。我做错了什么?
【问题讨论】:
-
所以你是说
ChildModel被序列化为一个数组而不是一个对象?序列化是否超出您的控制范围? -
我猜这是因为您的列表中的内容与您的 ChildModel 类之间没有映射。反序列化器如何知道将什么值放入模型的哪个属性中?如果可能,请修复序列化,否则构建自定义解析器并祈祷上帝不要更改列表中数据的顺序。
-
要将该数组反序列化为
ChildModel,您可以使用C# JSON.NET - Deserialize response that uses an unusual data structure 中的ObjectToArrayConverter<ChildModel>。 -
@EdPlunkett,是的,我无法控制该序列化。我只使用供应商提供的服务。