C#反序列化json的最佳对象或类结构

时间:2018-05-20 16:26:14

标签: c# json json.net

我有一个类似的json结构:

{
  "eventType1": {
    "unitName": "nameValue",
    "comment": "initial comment"
  },
  "eventType2": {
    "comment": "initial message"
  },
}

当我反序列化它时,适当的类型似乎类似Dictionary<string, <Dictionary<string,string>>>,方法看起来像这样:

public static Dictionary<string, Dictionary<string, string>> defaultFieldDataByEvent =
        JsonConvert
        .DeserializeObject<Dictionary<string, Dictionary<string, string>>>(defaultFieldDataByEventSerialized);
看起来很丑陋。但这正是我需要它来提取数据的方法 - defaultFieldDataByEvent[eventType][field]

我能否以某种方式将类型封装成某种形式,或者是否存在针对此类情况的不同方法?

1 个答案:

答案 0 :(得分:0)

我在这里看到了多种可能的选择。希望这些都有帮助。

  • 您可以尝试添加带有using指令的类型别名以缩短代码,但如果逻辑分布在多个文件中,这将不方便,因为您将被迫复制此别名。 / LI>
  • 您可以尝试使用JObject.Parse进行反序列化,保持较低级别。但是,就你的json结构而言,这种方法可能效果很好。
  • 您可以尝试将数据反序列化为ExpandoObject。它与JObject非常相似,除了你会得到相当不错的动态代码(动态在这里不是问题,因为编译器也不会帮助你Dictionary),但它显然会降低性能。您可能会丢失自定义类型信息,因为图表中的所有内容都将变为ExpandoObject,但对您的案例而言似乎不是问题。 Example可以在这里找到。
  • 您可以尝试使用[JsonExtensionData]作为@dbc建议。见How to serialize a Dictionary as part of its parent object using Json.Net