我有一個OrderedDictionary
與int
鍵和System.Drawing.Rectangle
值。 JSON.NET不會序列化OrderedDictionary
...它返回一個空對象。我寫了一個自定義轉換器,但我想知道是否有更簡單的方法。認爲JSON.NET可能使用類型化的枚舉的存在觸發使用其內置的代碼序列化和反序列化Dictionary<TKey, TValue>
我嘗試這樣做:使用JSON.NET與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]);
}
}
}
系列化完美的作品。但是,當我反序列化時,字典中的鍵變爲字符串,而Rectangle
爲JObject
,無法轉換爲Rectangle
。有什麼我可以添加到我的OrderedDictionary<>
類,將允許與JSON.NET正確的反序列化?謝謝。
其中OrderedDictionary ?,一個在'System.Collections.Specialized'? – Eser
是的。由於我必須使用15個字符,我還會提到我閱讀[這篇文章](http://stackoverflow.com/questions/2629027/no-generic-implementation-of-ordereddictionary),並正在考慮一個很好的實現在那裏,但是擔心同樣的反序列化行爲。 –
JSON.NET可能還沒有支持。您可以在https://github.com/JamesNK/Newtonsoft.Json –