C# Newtonsoft Json引用位于错误的一侧

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; }

我在序列化列表时遇到问题,列表中的每个对象也可以有一个列表(“链接”),该列表只能通过引用序列化。发生的情况是,引用位于错误的一侧,表示链接,包含实际的对象信息,而父列表包含引用id

请在下面查找完整代码:

   [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#class
Test
包含一个根属性
Templates
。你能提供一个实际证明问题的例子吗?我试图用所示的类反序列化问题中的JSON,但没有反序列化任何内容: