C# 通过字符串数组反序列化JSON一对多关系
我正在尝试从字符串数组中反序列化对象列表,该字符串数组包含相应的字符串和从父对象继承的值。我有以下简略的JSON输出:C# 通过字符串数组反序列化JSON一对多关系,c#,json.net,C#,Json.net,我正在尝试从字符串数组中反序列化对象列表,该字符串数组包含相应的字符串和从父对象继承的值。我有以下简略的JSON输出: { "sku":"1234-SKU", "divisions":[ "Division 1", "Division 2", "Division 3", "Division 4", "Finals Division" ] } 我有一个competition班和一个Division班,其节选如下: public c
{
"sku":"1234-SKU",
"divisions":[
"Division 1",
"Division 2",
"Division 3",
"Division 4",
"Finals Division"
]
}
我有一个competition
班和一个Division
班,其节选如下:
public class Competition
{
[JsonProperty("sku")]
public string Sku;
[JsonProperty("divisions")]
public virtual List<Division> Divisions;
}
public class Division
{
// Sku from parent object
public string CompetitionSku;
// Would be value from "divisions" array
public string Name;
}
公开课竞赛
{
[JsonProperty(“sku”)]
公共字符串Sku;
[JsonProperty(“部门”)]
公共虚拟名单司;
}
公共课组
{
//来自父对象的Sku
公开弦乐比赛;
//将是“分区”数组中的值
公共字符串名称;
}
使用示例JSON输出,我将得到一个Sku为“1234-Sku”的竞争对象和一个包含5个分区对象的列表,每个分区对象都有一个Sku“1234-Sku”,名称值为“分区1”、“分区2”,以此类推
我最初为JSON序列化程序创建了一个
列表
,然后通过迭代列表创建分割对象。是否有一种无需创建“承运商列表”即可正确填充分割对象的方法?理想情况下,我想我可以通过一个定制的JsonConverter
类来实现这一点,但我不确定如何实现这一点。我是通过为竞赛
类创建一个定制的JsonConverter
来实现的。我必须“手动”遍历它,但我可以通过这种方式访问整个对象。当我到达分区数组时,我将其反序列化为一个列表>
,然后在列表中迭代创建分区
对象,并插入已解析的竞争。Sku
似乎是您想要的。@metacube这很接近,除非我很傻,否则这不是我的情况。JSON输出中“divisions”列表中唯一的数据是进入Division对象的Name值,我需要将“sku”值传递给Division对象。。是的,我明白了。您没有包装器,因此可能需要您提到的自定义代码。@metacubed这就是我的想法。我尝试过使用JsonConverter
,但我没有找到任何能让我走上正轨的东西——你知道什么能让我开始吗?我可以反序列化列表,但读卡器只能向前访问,因此我无法回溯并获取Sku值。我有没有办法“重启”JsonReader?或者,原始Json字符串是否隐藏在序列化程序或读取器中?我找不到它。