将名为 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
{
"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