【发布时间】:2021-04-08 11:03:43
【问题描述】:
{
"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# 类时遇到了麻烦。我遇到的问题是 GUID 用于定义 Documents 对象具有的对象,而不是具有文档列表的文档对象。
我尝试创建一个包含对象列表的文档对象,并使用 Newtonsoft 反序列化到该对象中。我还尝试了文档对象中的字符串字典。这些都不起作用。
任何意见或想法将不胜感激。
编辑:我遇到的最大问题是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 吗?
-
这是一个
dictionary < Guid, object>,你可以看到Id是一样的 -
顺便说一句,如果您尝试匿名一些信息,请确保结果看起来不像毕加索。这几乎是野蛮行为。如果你有一个有效的 Json,你可以使用像 app.quicktype.io 这样的工具。这将重新调整 Dictionary 并生成一个不错的类
-
类的自动生成不是问题,问题在于对象的名称是动态的,并且它们具有一组也是动态的项目。
标签: c# json json.net deserialization