C#反序列化json的最佳对象或类结构
我有这样的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
{
"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
类。我也想在这里这样做,但当反序列化GIFEventData
需要包含固定和可变属性时,我不知道如何填充封装的字典,[JsonExtensionData]
可能适合您的需要。请参阅。您可以尝试使用指令添加带有的类型别名,以缩短代码,但如果逻辑分布在多个文件中,这将不方便。