我有以下字典,我非常想使用 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
类型名称属性来装饰值,因为它是字典。
我还没有找到有关该主题的任何其他信息,因此将不胜感激!
我也找到了这个解决方案,但它涉及创建一个 ExpandableObjectConverter 这不是一个非常优雅的解决方案。