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

C#反序列化json的最佳对象或类结构,c#,json,json.net,C#,Json,Json.net,我有这样的json结构: { "eventType1": { "unitName": "nameValue", "comment": "initial comment" }, "eventType2": { "comment": "initial message" }, } 当我对它进行反序列化时,合适的类型似乎是类似于Dictionary的类型,方法如下所示: public static Dictionary<string, Dictionary

我有这样的json结构:

{
  "eventType1": {
    "unitName": "nameValue",
    "comment": "initial comment"
  },
  "eventType2": {
    "comment": "initial message"
  },
}
当我对它进行反序列化时,合适的类型似乎是类似于
Dictionary
的类型,方法如下所示:

public static Dictionary<string, Dictionary<string, string>> defaultFieldDataByEvent =
        JsonConvert
        .DeserializeObject<Dictionary<string, Dictionary<string, string>>>(defaultFieldDataByEventSerialized);
公共静态字典defaultFieldDataByEvent=
JsonConvert
.反序列化对象(defaultFieldDataByEventSerialized);
看起来很难看。但这正是我提取数据所需要的方式-
defaultFieldDataByEvent[eventType][field]


我是否可以以某种方式将类型封装成某种形式,或者是否有不同的方法处理此类情况?

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


  • 您可以尝试使用指令添加类型别名以缩短代码,但如果逻辑分布在多个文件中,这将不方便,因为您将被迫复制此别名
  • 您可以尝试使用反序列化,停留在较低的级别。但就json结构而言,这种方法可能工作得很好
  • 您可以尝试将数据反序列化为。它与
    JObject
    非常相似,只是您会得到非常好的动态代码(动态代码在这里不是问题,因为编译器也不会帮助您使用
    字典
    ),但显然它的性能会比较差。您可能会丢失自定义类型信息,因为图形中的所有内容都将成为一个
    ExpandoObject
    ,但对于您的案例来说,这似乎不是问题。可能在这里找到
  • 您可以按照@dbc的建议尝试使用
    [JsonExtensionData]
    。看

对于
“eventTypeX”
对象是否有一组固定的可能属性?如果是这样,我将定义一个
EventData
类并反序列化到
Dictionary
@dbc,这不是确切的原因,这就是Dictionary而不是定义的自定义类的原因。否则,我将定义一个
EventData
类。我也想在这里这样做,但当反序列化GIF
EventData
需要包含固定和可变属性时,我不知道如何填充封装的字典,
[JsonExtensionData]
可能适合您的需要。请参阅。您可以尝试使用指令添加带有
的类型别名,以缩短代码,但如果逻辑分布在多个文件中,这将不方便。