我正在使用Newtonsoft Json.NET库进行序列化/反序列化。
我有问题反序列化具有 Dictionary<属性的对象。整型,对象> 即可。在字典中 - 对象可以是任何类型。
以下是我为测试所做的工作。
[DataContract]
public class MyClass
{
[DataMember(Order = 1)]
public int ID { get; set; }
[DataMember]
public string Text { get; set; }
[DataMember]
public Dictionary<int,object> sub { get; set; }
}
[DataContract]
public class MyClass2
{
[DataMember]
public int ID2 { get; set; }
[DataMember]
public string Text2 { get; set; }
}
点击按钮,点击简单的WPF应用程序。
MyClass c = new MyClass() { ID = 1, Text = "Hello", sub = new Dictionary<int, object>() };
MyClass2 c2 = new MyClass2() { ID2 = 2, Text2 = "sub1" };
c.sub.Add(1, c2);
MyClass2 c3 = new MyClass2() { ID2 = 3, Text2 = "sub2" };
c.sub.Add(2, c3);
string file = "c:\\newfile.txt";
if (File.Exists(file))
File.Delete(file);
Newtonsoft.Json.JsonSerializer ser = new Newtonsoft.Json.JsonSerializer();
File.WriteAllText(file, JsonConvert.SerializeObject(c));
MyClass o = JsonConvert.DeserializeObject<MyClass>(File.ReadAllText(file));
}
Serilaized Json String -
{ “文本”: “你好”, “子”:{ “1”:{ “ID2”:2 “文本2”: “SUB1”}, “2”:{ “ID2”:3“,文本2 “:” SUB2 “}},” ID“:1}
反序列化 - 解析了MyClass实例的属性,但属性Dictionary (sub)仍然没有解析为MyClass2的json字符串。
有人可以帮助我吗?
答案 0 :(得分:1)
要解决您的问题,您应该更改
[DataMember]
public Dictionary<int,object> sub { get; set; }
致:
[DataMember]
public Dictionary<int,MyClass2> sub { get; set; }
和
MyClass c = new MyClass() { ID = 1, Text = "Hello", sub = new Dictionary<int, object>() };
到
MyClass c = new MyClass() { ID = 1, Text = "Hello", sub = new Dictionary<int, MyClass2>() };
修改强>
要反序列化MyClass2,MyClassN ......您应该使用TypeNameHandling.All
MyClass o = JsonConvert.DeserializeObject<MyClass>(File.ReadAllText(file), new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
答案 1 :(得分:1)
无法反序列化对象。 Json.NET无法确定确切的类。