2017-05-08 149 views
0

如果我有一本字典并添加例如一个类MyClass的实例到这个字典,我如何确保字典的反序列化和序列化包含类而不是JObject?使用JSON.NET反序列化和序列化字典<字符串,对象>

internal class MyClass 
{ 
    public string MyProperty { get; set; } 
} 

[TestMethod] 
public async Task DebugTest() 
{ 
     Dictionary<string, object> testDictionary = new Dictionary<string, object>(); 
     testDictionary.Add("testkey", new MyClass() { MyProperty = "testproperty" }); 
     string json = JsonConvert.SerializeObject(testDictionary); 
     Dictionary<string, object> restoredDictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(json); 
    } 

testDictionary包含MyClass,但restoredDictionary包含JObject。请注意,我将不得不使用字符串,对象。所以我真的想要一种方式来告诉Json.Net转换为类而不是JObject

+0

尝试'var restoredDictionary = JsonConvert.DeserializeObject >(json);' –

+0

用'Dictionary 替换您的testDictionary和restoredDictionary'..为什么要使用对象? – Vandita

+0

我想使用字符串,对象来捕捉不同类型的对象(如MyClassA,MyClassB等)。它是ObjectConverters的更大对象模型的一部分。这部分工作很好,只是字典是一个问题。 – MortenGR

回答

0

问题是,Json.Net无法知道字符串,对象反序列化和序列化应该是一个特定的类型。幸运的是,有一个名为TypeNameHandling的属性告诉Json.Net将该类型保存在json字符串中。使用这个选项进行序列化和deserilizing完美工作:-)。

相关问题