我实际上正在填充Dictionary<string, object>
,其中包含不同类型的对象(它是一种属性包)。
我希望能够序列化和反序列化这本词典。我的问题是,当我用json.net序列化它时,它不存储字典中值的类型信息。
以下是一个例子:
Dictionary<string, object> items = new Dictionary<string, object>();
items.Add("a number", 1.23f);
items.Add("a point", new Point(5,6));
JsonSerializerSettings settings = new JsonSerializerSettings() { Formatting = Formatting.Indented, TypeNameHandling=TypeNameHandling.All };
var serialized = JsonConvert.SerializeObject(items, settings);
我在serialized
变量中得到了这个结果:
{
"$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib",
"a number": 1.23,
"a point": "5,6"
}
所以它实际上存储了字典本身的类型(这对我来说有点无用),但不存储对象本身的类型信息。我希望它能保存对象本身的类型信息。这样的事情可能是:
{
{ "a number": 1.23, "$type" : "System.Float, mscorlib..." },
{ "a point": "5,6", "$type" : "System.Drawing.Point..." }
}
当然,我希望在反序列化时使用此类型信息,以便例如字典中的第二个值实际上被反序列化为Point而不是字符串。
有办法做到这一点吗?