将名为 JSON 的动态属性反序列化为 C# class

deserializing dynamic named JSON attributes to a C# class

{
  "Documents": {
    "c97bba6f-c8ab-4453-91f8-f663f478910c": {
      "id": "c97bba6f-c8ab-4453-91f8-f663f478910c",
      "name": "name",
      "sys": {
        "c67bfa6f-c8ab-4453-91f8-f663f478910c": {
          "id": "c97bba6f-c8ab-4453-91f8-f663f478910c",
          "name": "sys name"
        },
        "a67bfa6f-c8ab-4453-91f8-f663f478910c": {
          "id": " a67bfa6f-c8ab-4453-91f8-f663f478910c",
          "name": "sys name"
        }
      }
    },
    "f97bba6f-c8ab-4453-91f8-f663f478910c": {
      "id": "c97bba6f-c8ab-4453-91f8-f663f478910c",
      "name": "OZL - B - MECH - AC - Fan Coil Units",
      "sys": {}
    }
  }
}

我在上面的表格中得到了 JSON 数据,但在将其反序列化为 C# class 时遇到了问题。我遇到的问题是 GUID 用于定义 Documents 对象具有的对象,而不是具有文档列表的文档对象。

我尝试创建一个包含对象列表的文档对象,并使用 Newtonsoft 将其反序列化。我还尝试了一个字符串字典,文档对象中的对象。 None 这些作品。

如有任何意见或想法,我们将不胜感激。

编辑:我遇到的最大问题是 Dictionary<GUID, object> 的嵌套。 Newtonsoft 不会映射到第一个对象中的字典。这是我拥有的:

public class Documents {
   public dictionary<Guid, System> data { get; set; }
}

public class System {
   public Guid Id { get; set;}
   public string Name { get; set; }
   public dictionary<guid, someOtherobject> otherData { get; set;}
}

根据你的JSON,你需要的class结构是这样的:

public class RootObject
{
    public Dictionary<Guid, Document> Documents { get; set; }
}

public class Document
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public Dictionary<Guid, Sys> Sys { get; set; }
}

public class Sys
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

然后像这样反序列化成RootObject class:

var root = JsonConvert.DeserializeObject<RootObject>(json);

这是一个工作演示:https://dotnetfiddle.net/Uycomw