Jak mogę zrobić serializator Json.NET do serializacji instancji IDictionary<,>
do tablicy obiektów z właściwościami klucz/wartość? Domyślnie serializuje wartość klucza do nazwy właściwości obiektu JSON.Serializuj słownik <,> jako tablicę w Json.NET
Zasadniczo muszę coś takiego:
[{"key":"some key","value":1},{"key":"another key","value":5}]
zamiast:
{{"some key":1},{"another key":5}}
Próbowałem dodać KeyValuePairConverter
do ustawień serializer ale to nie ma znaczenia. (Uważam, że ten konwerter jest ignorowany na typ IDictionary<>
ale nie można łatwo zmienić typ mojego obiektów jak są one odbierane z innych bibliotek, więc zmiana z IDictionary<>
do ICollection<KeyValuePair<>>
nie jest opcja dla mnie.)
Byłoby łatwiej (i bardziej kompletny), aby sprawdzić, czy nie-generycznego 'System.Collections.IDictionary' zamiast. Ogólne interfejsy generalnie rozszerzają ogólne interfejsy. Ponadto twoja metoda 'TypeImplementsGenericInterface()' może zostać uproszczona za pomocą 'Any()' zamiast 'Where(). FirstOrDefault()! = Null'. –
Chociaż byłoby miło, 'IDictionary' faktycznie NIE rozszerza nietypowego interfejsu 'IDictionary'. Zobacz dokumentację (http://msdn.microsoft.com/en-us/library/s4ys34ea.aspx). Jednak ze względu na kompletność, zredagowałem swoją odpowiedź, aby dodać obsługę 'IDictionary' i włączyłem twoją drugą sugestię na temat uproszczenia metody' TypeImplementsGenericInterface() '. Dzięki! –
Ach tak, zapomniałem o tym. Correction, _immutable_ generic interfaces generalnie rozszerza odpowiedni _immutable_ nie-rodzajowy interfejs, niestety nie ma tu zastosowania. –