Niektóre niestandardowe typy implementujące IEnumerable niekoniecznie mają kolekcje zabezpieczające. Mogą być generowane dynamicznie, na przykład za pomocą "yield" lub LINQ. Oto przykład:Jak pominąć domyślną serializację tablic JavaScript dla typów IEnumerable w Json.Net?
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();
}
}
}
I odkryli, że domyślna serializacji przez Json.NET jest wyliczać każdą wartość i przechowywać wartości w tablicy JavaScript (który nie chce). Domyślny deserializer nie może deserializować kolekcji, ponieważ nie może zostać wypełniony. W takich przypadkach chciałbym, aby Json.NET pomijał domyślną serializację tablic JavaScript i po prostu przechowywał członków klasy.
Wszystko, czego chcę, to moje klucze i wartości - czy jest na to jakiś skrót, czy muszę wprowadzić własny niestandardowy serializator?
Sprawdzone this i this, z których żadna nie jest dokładnie moim pytaniem. Zeskanowane the documentation, ale nie znalazłem tego, czego szukałem (być może szukałem w niewłaściwym miejscu).
(Edit # 1 - lepsza klarowność)
(Edit # 2 - odpowiedział na moje własne pytanie ... zobacz niżej)
Ta strona posiada opisy 'JsonObject' i innych atrybutów. http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm – kmc059000