Rozważmy następujące klasy:Jak spłaszczyć obiekt, do którego następuje odwołanie, do dwóch właściwości json.net w referer?
public class User
{
public virtual int Id {get;set;}
public virtual string Name {get;set;}
public virtual User Superior {get;set;}
}
moim celem jest to, jak serializacji json używając newtonsofts json.net tak:
{
Id: 101,
Name: 'Mithon',
SuperiorId: 100,
SuperiorName: 'TheMan'
}
Dlaczego chcesz to zrobić? Ponieważ chcę używać Jsona jako moich DTO bez generowania pośredniej warstwy dynamicznych obiektów. Generowanie DTO powinno odbywać się dynamicznie według konwencji, a nie jawnie, imho. Wiem, że niektórzy mogą zdecydowanie nie zgodzić się z tym, ale omawianie mojego podejścia jest poza tym punktem. Chcę tylko wiedzieć, czy i jak można to zrobić.
Wyzwanie polega na tym, że użycie właściwości JsonPropertyAttribute
dla właściwości Superior da tylko jedną właściwość jako wynik, w której potrzebuję dwóch. Jeśli użyję JsonObjectAttribute
, otrzymam atrybut zagnieżdżony i będę miał problem z spłaszczeniem najwyższego poziomu użytkownika.
Na szczęście wygląda na to, że w bibliotece json.net jest wystarczająco dużo chronionych i/lub publicznych właściwości i metod, które mogę rozszerzyć, aby uzyskać pożądany rezultat. Pozostaje zatem pytanie, z którymi klasami i metodami powinienem zacząć, aby dostać się tam, gdzie chcę iść? Czy wywodzi się z DefaultContractResolver, a nadpisywanie metody GetProperties to dobre miejsca, czy powinienem szukać gdzie indziej?