Json.NET:如何序列化Dictionary <string,object =“”>但保留对象类型

时间:2016-10-22 21:03:27

标签: c# .net json.net

我实际上正在填充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而不是字符串。

有办法做到这一点吗?

0 个答案:

没有答案