Моя модель класса выглядеть следующим образом:Обработка циклическая с Newtonsoft JSON
public class ModelType
{
public string Name { get; set; }
public ModelType SuperType { get; set }
public IEnumerable<ModelType> SubTypes { get; set; }
}
Я пытаюсь сериализации объекта, но получить StackOverflowException
. Я пытался позвонить
JsonConvert.SerializeObject(model, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
, а также
JsonConvert.SerializeObject(model, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
Оба вызова привели к StackOverflowException
. Любая идея, как сериализовать ModelType
экземпляр?
РЕДАКТИРОВАТЬ:
Пример экземпляра, который не может сериализовать:
{
Name: "Child",
SuperType: {
Name: "Parent",
SuperType: null,
SubTypes: [{
Name: "Child",
SuperType: {
Name: "Parent",
SuperType: null,
SubTypes: [{Name: "Child", ...}]
},
SubTypes: []
}]
},
SubTypes: []
}
EDIT2:
Путем дальнейшего изучения вопроса (по всем SO Q & A , установка ReferenceLoopHandling.Ignore
или PreserveReferencesHandling.Objects
должна работать) Я выяснил, что
- ребенок уникален экземпляр объекта
- Child.SuperType (Родитель) является уникальным экземпляром объекта
- Child.SuperType.SubTypes [0] (ребенок) является экземпляром уникального объекта, не является ссылкой на (1.)
- Child.SuperType.SubTypes [0] .SuperType (Parent) является экземпляром уникального объекта, а не ссылка (2)
- И так далее ...
Я думаю, что-то пошло неправильно во время объекта c reation (из моего кода), и это создало бесконечную цепочку объектов. Я не уверен, что это возможно даже с JsonSerializerSettings
.
Добавлен пример населенного объекта. – mimo
У вас есть полный C# -проигрыватель, который компилируется. –
@Simon Mourier, извините, но не могу предоставить код, который компилируется, он слишком сложный (через сущность framework -> получение объектов данных -> передача бизнес-сущностям). Но я думаю, что нашел основную причину. Когда объект данных преобразуется в бизнес-объект, создается эта бесконечная цепочка, устанавливая свойства SuperType и SubTypes по запросу Lync, который оценивается «на ходу» при сериализации. – mimo