m.bleimuth Ответов: 0

Ссылка 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

0 Ответов