Jak pominąć domyślną serializację tablic JavaScript dla typów IEnumerable w Json.Net?
Niektóre typy niestandardowe, które implementują IEnumerable, niekoniecznie mają zbiory kopii zapasowych. Mogą być generowane dynamicznie, na przykład przy użyciu „yield” lub LINQ. Oto przykład:
public class SOJsonExample
{
public class MyCustomEnumerable : IEnumerable<KeyValuePair<int,float>>
{
public List<int> Keys { get; set; }
public List<float> Values { get; set; }
public MyCustomEnumerable()
{
Keys = new List<int> { 1, 2, 3 };
Values = new List<float> { 0.1f, 0.2f, 0.3f };
}
public IEnumerator<KeyValuePair<int, float>> GetEnumerator()
{
var kvps =
from key in Keys
from value in Values
select new KeyValuePair<int, float>(key, value);
return kvps.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
}
Odkryłem, że domyślna serializacja przez Json.NET polega na wyliczeniu każdej wartości i zapisaniu wartości w tablicy JavaScript (czego nie chcę). Domyślny deserializator nie będzie mógł następnie deserializować kolekcji, ponieważ nie może być wypełniony. W takich przypadkach chciałbym, aby Json.NET pomijał domyślną serializację tablic JavaScript i po prostu zapisywał członków klasy.
Wszystko czego chcę to moje klucze i wartości - czy jest jakiś sposób na to, czy muszę zaimplementować własny niestandardowy serializator?
Sprawdzoneto ito, z których żadne nie jest dokładnie moim pytaniem. Zeskanowanedokumentacja również, ale nie znalazłem tego, czego szukałem (być może spojrzałem w niewłaściwe miejsce).
(Edytuj # 1 - poprawiona przejrzystość)
(Edytuj # 2 - odpowiedział na moje własne pytanie ... patrz poniżej)