Как объединить ссылочный объект в два свойства 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 's должно быть сделано динамически по соглашению, а не явно, imho. Я знаю, что некоторые могут сильно не согласиться с этим, но обсуждение моего подхода не в этом. Я просто хочу знать, если и как это можно сделать.
Проблема в том, что с помощьюJsonPropertyAttribute
для свойства Superior будет выдаваться только одно свойство, где мне нужно два. Если я используюJsonObjectAttribute
Я получу вложенный атрибут, и у меня возникнут проблемы с пользователем верхнего уровня, который также будет сглажен.
К счастью, в библиотеке json.net достаточно защищенных и / или общедоступных свойств и методов, которые я могу расширить, чтобы получить желаемый результат. Тогда возникает вопрос: с каких классов и методов мне следует начинать, чтобы достичь того, чего я хочу? Будет ли производным от DefaultContractResolver и переопределением метода GetProperties быть хорошими местами, или я должен искать в другом месте?