У меня есть 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
s - JObject
s, которые не могут быть отлиты до Rectangle
. Есть ли что-то, что я могу добавить к моему классу OrderedDictionary<>
, что позволит правильно десериализоваться с помощью JSON.NET? Благодарю.
Какой заказный документ ?, один в 'System.Collections.Specialized'? – Eser
Да. Поскольку я должен использовать 15 символов, я также упоминаю, что я читаю [этот пост] (http://stackoverflow.com/questions/2629027/no-generic-implementation-of-ordereddictionary) и рассматриваю одну из тонких реализаций там, но бойтесь того же десериализационного поведения. –
Возможно, у JSON.NET пока нет поддержки. Вы можете опубликовать этот запрос на https://github.com/JamesNK/Newtonsoft.Json –