【问题标题】:Deserialize and serialize a dictionary<string, object> using JSON.NET使用 JSON.NET 反序列化和序列化字典<string, object>
【发布时间】:2017-05-08 11:02:36
【问题描述】:

如果我有字典并添加例如这个字典的 MyClass 类的实例,我如何确保字典的反序列化和序列化包含该类而不是 JObject?

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,但 restoreDictionary 包含 JObject。

更新:请注意,我将不得不使用字符串、对象。所以我真的在寻找一种方法来告诉 Json.Net 转换为类而不是 JObject

【问题讨论】:

  • 试试var restoredDictionary = JsonConvert.DeserializeObject&lt;Dictionary&lt;string, MyClass&gt;&gt;(json);
  • 用 testDictionary 替换你的,用 Dictionary&lt;string, MyClass&gt;.. 替换你的 restoreDictionary 。为什么你要使用 object ?
  • 我想使用字符串、对象来捕获不同类型的对象(如 MyClassA、MyClassB 等)。它是具有 ObjectConverters 的更大对象模型的一部分。那部分效果很好,只是字典有问题。

标签: c# serialization json.net deserialization


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-02
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多