Рассмотрим следующий класс:Как сгладить ссылочный объект на два свойства json.net в реферере?
public class User
{
public virtual int Id {get;set;}
public virtual string Name {get;set;}
public virtual User Superior {get;set;}
}
Моя цель заключается в сериализации это как JSON с помощью newtonsofts json.net так:
{
Id: 101,
Name: 'Mithon',
SuperiorId: 100,
SuperiorName: 'TheMan'
}
Почему я хочу, чтобы это сделать? Потому что я хочу использовать Json как мой DTO без создания промежуточного слоя динамических объектов. Генерация DTO должна выполняться динамически по соглашению, а не явно, imho. Я знаю, что некоторые могут сильно не соглашаться с этим, но обсуждение моего подхода - это не главное. Я просто хочу знать, как и как это можно сделать.
Задача состоит в том, что использование свойства JsonPropertyAttribute
для свойства Superior даст только одно свойство как выход, где мне нужно два. Если я использую JsonObjectAttribute
, я получу вложенный атрибут, и у меня возникнут проблемы с тем, что пользователь верхнего уровня будет сплющен.
К счастью, в библиотеке json.net достаточно защищенных и/или общедоступных свойств и методов, что я могу расширить что-то, чтобы получить желаемый результат. Тогда возникает вопрос, с какими классами и методами я должен начать, где я хочу идти? Получается ли из DefaultContractResolver и переопределение метода GetProperties - это хорошие места или я должен искать в другом месте?