Ссылка Newtonsoft json неправильная сторона
Привет,
у меня возникли проблемы с сериализацией списка, каждый объект в списке может также иметь список ("ссылки"), который должен быть сериализован только по ссылке. Что происходит, так это то, что ссылки находятся на неправильной стороне, означают ссылки, содержат фактическую информацию об объекте, а родительский список содержит идентификатор ссылки.
Полный код приведен ниже
[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(); }
Полный пример вы можете скачать здесь.
Некорректный Формат JSON:
{ "$id": "1", "$values": [{ "$id": "2", "$type": "JsonTest.Template, JsonTest", "Name": "A", "Links": { "$id": "3", "$values": [{ "$id": "4", "$type": "JsonTest.Template, JsonTest", "Name": "B", "Links": { "$id": "5", "$values": [] } }, { "$id": "6", "$type": "JsonTest.Template, JsonTest", "Name": "C", "Links": { "$id": "7", "$values": [] } }] } }, { "$ref": "4" }, { "$ref": "6" }] }
Как это должно выглядеть:
{ "$id": "1", "$values": [{ "$id": "2", "$type": "JsonTest.Template, JsonTest", "Name": "A", "Links": { "$id": "3", "$values": [{"$ref":"4"}, {"$ref":"6"}] } }, { "$id": "4", "$type": "JsonTest.Template, JsonTest", "Name": "B" }, { "$id": "6", "$type": "JsonTest.Template, JsonTest", "Name": "C" }] }
КР Ману
Что я уже пробовал:
Я перепробовал все возможные конфигурации JsonSerializer, но безуспешно.
Graeme_Grant
Пожалуйста, обновите свой вопрос примерами неправильной сериализации и правильной сериализации, чтобы мы могли лучше понять.
m.bleimuth
Upated мой вопрос с неправильными / правильными выходами json