У меня есть следующий словарь, который я бы очень хотел сериализовать с помощью Json.Net. Словарь содержит элементы интерфейса IConvertible
, позволяющие мне добавлять в словарь все примитивные типы, которые мне нужны.
var dic = new Dictionary<string, IConvertible>();
dic.Add("bool2", false);
dic.Add("int2", 235);
dic.Add("string2", "hellohello");
У меня есть следующая реализация для сериализации списка с использованием Json.net:
var settings = new JsonSerializerSettings();
settings.TypeNameHandling = TypeNameHandling.Objects;
var dicString = JsonConvert.SerializeObject(dic, Newtonsoft.Json.Formatting.Indented, settings);
Это дает мне следующий вывод:
{
"$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.IConvertible, mscorlib]], mscorlib",
"bool2": false,
"int2": 235,
"string2": "hellohello"
}
Тем не менее. При попытке десериализации как таковой:
var dic2 = JsonConvert.DeserializeObject<Dictionary<string, IConvertible>>(dicString);
... Я получаю следующую ошибку:
Error converting value False to type 'System.IConvertible'. Path 'bool2', line 3, position 16.
Я оглянулся и нашел следующее; но установка typeNameHandling не решила это. Также я не могу украсить значение IConvertible
атрибутом имени типа, так как это словарь.
Приведение интерфейсов для десериализации в JSON.NET
Я не нашел никакой другой информации по этой теме, поэтому некоторая помощь будет принята с благодарностью!
Я также нашел это решение, но оно включает в себя создание ExpandableObjectConverter, который не очень элегантное решение.
Проблемы с использованием JSON.NET с ExpandableObjectConverter