2017-05-08 14 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復元された辞書= JsonConvert.DeserializeObject >(json); ' –

+0

をtestDictionaryとrestoredDictionaryに置き換えると 'Dictionary 'となります。なぜオブジェクトを使いたいのですか? – Vandita

+0

文字列、オブジェクトを使用して、異なる種類のオブジェクト(MyClassA、MyClassBなど)をキャッチします。これは、ObjectConvertersを使用したより大きなオブジェクトモデルの一部です。その部分は素晴らしい、それは問題である辞書だけです。 – MortenGR

答えて

0

問題は、Json.Netが文字列、オブジェクトの逆直列化と直列化を再度知る方法がないことです特定のタイプ。幸いにも、Json.Netにタイプをjson文字列に保存するように指示するTypeNameHandlingという属性があります。シリアライズとデシライゼーションにこのオプションを使用すると、完璧に動作しました:-)

関連する問題