Как объединить ссылочный объект в два свойства 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 быть хорошими местами, или я должен искать в другом месте?

Ответы на вопрос(1)

Ваш ответ на вопрос