C# Newtonsoft Json引用位于错误的一侧
我在序列化列表时遇到问题,列表中的每个对象也可以有一个列表(“链接”),该列表只能通过引用序列化。发生的情况是,引用位于错误的一侧,表示链接,包含实际的对象信息,而父列表包含引用id 请在下面查找完整代码:C# Newtonsoft Json引用位于错误的一侧,c#,json,json.net,C#,Json,Json.net,我在序列化列表时遇到问题,列表中的每个对象也可以有一个列表(“链接”),该列表只能通过引用序列化。发生的情况是,引用位于错误的一侧,表示链接,包含实际的对象信息,而父列表包含引用id 请在下面查找完整代码: [Serializable] public class Template { public string Name { get; set; } public List<Template> Links { get; set; }
[Serializable]
public class Template
{
public string Name { get; set; }
public List<Template> Links { get; set; }
public Template()
{
Links = new List<Template>();
}
}
List<Template> toserialize = new List<Template>();
toserialize.Add(new JsonTest.Template() { Name = "A" });
toserialize.Add(new JsonTest.Template() { Name = "B" });
toserialize.Add(new JsonTest.Template() { Name = "C" });
toserialize[0].Links.Add(toserialize[1]);
toserialize[0].Links.Add(toserialize[2]);
using (FileStream fs = new FileStream(@"C:\Outputtest.json", FileMode.Create))
using (StreamWriter writer = new StreamWriter(fs))
using (JsonTextWriter json = new JsonTextWriter(writer))
{
JsonSerializer ser = new JsonSerializer()
{
TypeNameHandling = TypeNameHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Error,
PreserveReferencesHandling = PreserveReferencesHandling.All,
NullValueHandling = NullValueHandling.Ignore,
};
ser.Serialize(json, toserialize);
json.Flush();
}
[可序列化]
公共类模板
{
公共字符串名称{get;set;}
公共列表链接{get;set;}
公共模板()
{
链接=新列表();
}
}
List toserialize=新列表();
添加(新的JsonTest.Template(){Name=“A”});
添加(新的JsonTest.Template(){Name=“B”});
添加(新的JsonTest.Template(){Name=“C”});
toserialize[0]。Links.Add(toserialize[1]);
toserialize[0]。Links.Add(toserialize[2]);
使用(FileStream fs=newfilestream(@“C:\Outputtest.json”,FileMode.Create))
使用(StreamWriter writer=新StreamWriter(fs))
使用(JsonTextWriter json=新的JsonTextWriter(writer))
{
JsonSerializer ser=新的JsonSerializer()
{
TypeNameHandling=TypeNameHandling.Objects,
ReferenceLoopHandling=ReferenceLoopHandling.Error,
PreserveReferencesHandling=PreserveReferencesHandling.All,
NullValueHandling=NullValueHandling.Ignore,
};
序列化(json,toserialize);
json.Flush();
}
如何将引用id移动到正确的位置?
您可以在此处下载完整示例:
KR您可以共享示例json值本身吗?您是指json文件吗?可以。。。但不是完整的json文件。。。只是它的相关部分..添加了json输出您的json与您的c#类不匹配。JSON包含一个根属性
“Items”
,但c#classTest
包含一个根属性Templates
。你能提供一个实际证明问题的例子吗?我试图用所示的类反序列化问题中的JSON,但没有反序列化任何内容: