C# 读取JSON文件会将项添加到同一类的另一个属性的列表中
我有一系列的课程,如下所示:C# 读取JSON文件会将项添加到同一类的另一个属性的列表中,c#,json,C#,Json,我有一系列的课程,如下所示: public class Class1 : IClass { public List<Class2> Class2List { get { return Class3Instance.Class2List; } } public Class3 Class3Instance { get; set; } } public class Class2 { public string Field1 { get; set; } p
public class Class1 : IClass
{
public List<Class2> Class2List { get { return Class3Instance.Class2List; } }
public Class3 Class3Instance { get; set; }
}
public class Class2
{
public string Field1 { get; set; }
public int Field2 { get; set;}
}
public class Class3
{
public List<Class2> Class2List { get; set; }
}
然后,如果我立即反序列化JSON并再次序列化它,我会得到以下结果:
{
"Class3Instance": {
"Class2List2": [
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
},
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
}
]
},
"Class2List": [
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
},
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
}
]
}
如您所见,当我反序列化JSON时,Class2List成员已被复制。正如@mortb所说:
问题在于Class3Instance.Class2List的快捷方式,在JSON中序列化的所述列表的任何成员将被添加到快捷方式的引用中,除了所述引用以前在同一JSON文件中的成员之外
这是因为反序列化不知道如何区分Class1中的shorcut引用Class3Instance.Class2List和Class3中的Class2List,因此不知道是否应该忽略快捷方式字段上的序列化或反序列化操作
为了解决这个问题,无论是合同解析器还是将属性[JsonIgnore]设置为快捷方式引用,都可以解决这个问题。Class2代码丢失了它与此无关,但我也会添加它,谢谢你的提醒,你能发布一个?@aloisdg吗?我试图将我的应用程序中的类结构简化为只与问题相关的类结构,例如你给我看的示例,我应该提供重现问题的JSON还是按预期重现问题的解决方案?@OscarGuillamon:为什么不运行简化的示例来创建序列化输出,然后反序列化该输出。您可以将这些结果包括在问题中,并告诉我们输出是如何出错的。到目前为止,任何想回答你问题的人都必须自己创建这样一个程序,这将花费太多的时间来回答你的问题。
{
"Class3Instance": {
"Class2List2": [
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
}
]
},
"Class2List": [
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
}
]
}
{
"Class3Instance": {
"Class2List2": [
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
},
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
}
]
},
"Class2List": [
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
},
{
"Field1": "Member1",
"Field2": 1
},
{
"Field1": "Member2",
"Field2": 2
},
{
"Field1": "Member3",
"Field2": 3
},
{
"Field1": "Member4",
"Field2": 4
},
{
"Field1": "Member5",
"Field2": 5
}
]
}