处理Json的动态结构

时间:2014-04-03 01:30:13

标签: c# json json.net

我有这样的Json结构:

metadata : {
   id : "something",
   data : {
      1 : {
         id : "something",
         simple : {
             ASD3472GJVMKG : { id : "something", name : "something" },
             A892SADKLAWEN : { .. },
             KVMSD309234KG : { .. },
      2 : { .. }, 
      ...

有两个属性动态生成,它们是data的属性和simple的属性。 data的名称属性是生成增量的数字。 simple的名称属性是动态生成的随机字符串。

实际上,我已经完成了simple的属性的反序列化,其过程并不简单(foreach和substring无处不在)。顺便说一下,我正在使用Json.NET和C#。我需要用这种糟糕的Json结构做什么样的解决方案?我已经看过JObject和Dictionary类,但仍然没有想到它。

提前致谢

1 个答案:

答案 0 :(得分:2)

您在上面显示的结构不是有效的JSON。您需要为JSON.NET输入生成有效的JSON,或者为此类数据创建特殊的解析器。

如果您正在使用有效的JSON并且事先不知道属性名称,则可以使用以下反序列化方法之一。

  1. 将对象反序列化为JObject而不是更具体的类型。这允许您访问对象的各个属性。
  2. 将对象反序列化为Dictionary<string, JObject>。在实践中,这几乎等同于之前的选项。
  3. 将对象反序列化为包含以下字段的对象。在反序列化期间,所有未映射到对象模型中的其他字段或属性的属性都将添加到此字典中。

    [JsonExtensionData]
    private Dictionary<string, JObject> _extensionData;