Einige benutzerdefinierte Typen, die IEnumerable implementieren, verfügen nicht unbedingt über Sicherungskopien. Sie könnten dynamisch generiert werden, zum Beispiel mit 'yield' oder LINQ. Hier ein Beispiel:Wie überspringe ich die standardmäßige JavaScript-Array-Serialisierung für IEnumerable-Typen in 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();
}
}
}
habe ich entdeckt, dass die Standard-Serialisierung von Json.NET ist jeder Wert aufzuzählen und speichern die Werte in einem JavaScript-Array (was ich nicht will). Der Standard-Deserializer kann die Sammlung dann nicht deserialisieren, da sie nicht aufgefüllt werden kann. In diesen Fällen möchte ich stattdessen, dass Json.NET die standardmäßige JavaScript-Array-Serialisierung überspringt und nur die Mitglieder der Klasse speichert.
Alles, was ich will, sind meine Schlüssel und Werte - gibt es eine Verknüpfung Weg, um dies zu tun, oder muss ich meine eigenen benutzerdefinierten Serialisierer implementieren?
Geprüft this und this, von denen keiner genau meine Frage ist. Gescannt the documentation auch, aber nicht gefunden, was ich gesucht habe (vielleicht habe ich an der falschen Stelle gesucht).
(Edit # 1 - verbesserte Klarheit)
(Edit # 2 - meine eigene Frage beantwortet ... siehe unten)
Diese Seite hat die Beschreibungen für 'JsonObject' und die anderen Attribute. http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm – kmc059000