Ich habe eine OrderedDictionary
mit int
Schlüssel und System.Drawing.Rectangle
Werte. JSON.NET wird die OrderedDictionary
nicht serialisieren ... es gibt ein leeres Objekt zurück. Ich schrieb einen benutzerdefinierten Konverter, aber ich fragte mich, ob es einen einfacheren Weg gab. Zu denken, dass JSON.NET könnte das Vorhandensein eines typisierten enumerator als Auslöser verwenden, um seinen integrierten Code zu verwenden für die Serialisierung und Deserialisierung ein Dictionary<TKey, TValue>
ich das versucht:Verwenden von JSON.NET mit OrderedDictionary
class Program
{
static void Main(string[] args)
{
var test = new OrderedDictionary<int, Rectangle>();
test.Add(1, new Rectangle(0, 0, 50, 50));
test.Add(42, new Rectangle(1, 1, 1, 1));
string s = JsonConvert.SerializeObject(test);
var deserialized = JsonConvert.DeserializeObject<OrderedDictionary<int, Rectangle>>(s);
var someRect = deserialized[(object)1]; // someRect is null
var someOtherRect = (Rectangle)deserialized["1"]; // InvalidCastException
}
}
public class OrderedDictionary<TKey, TValue> : OrderedDictionary, IEnumerable<KeyValuePair<TKey, TValue>>
{
IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()
{
foreach (TKey key in Keys)
{
yield return new KeyValuePair<TKey, TValue>(key, (TValue)this[key]);
}
}
}
Serialisierung perfekt funktioniert. Wenn ich deserialize, werden die Schlüssel in dem Wörterbuch jedoch Zeichenfolgen und die Rectangle
s sind JObject
s, die nicht in Rectangle
umgewandelt werden können. Kann ich meiner Klasse OrderedDictionary<>
etwas hinzufügen, das eine korrekte Deserialisierung mit JSON.NET ermöglicht? Vielen Dank.
Welche OrderedDictionary ?, eine in 'System.Collections.Specialized'? – Eser
Ja. Da ich 15 Zeichen verwenden muss, werde ich auch erwähnen, dass ich [diesen Beitrag] (http://stackoverflow.com/questions/2629027/no-generic-implementation-of-ordereddictionary) gelesen habe und über eine der feinen Implementierungen nachdenke dort, aber fürchten das gleiche Deserialisierungsverhalten. –
Es ist möglich, dass JSON.NET noch keine Unterstützung dafür bietet. Sie können diese Anfrage auf https://github.com/JamesNK/Newtonsoft.Json –