解析 Json 类型名称不可预测的对象
Parse Json object of unpredictable type name
我正在尝试解析来自 RESTfull Api 的 JSON 答案。我通常使用 NewtonSoft Json.Net 来反序列化对象(借助 Json2Csharp 等工具)。
虽然这一次,我从网络服务得到的答案更复杂。
答案如下:(查看完整答案here)
[
{
"semester": 0,
"modules": {
"B-ANG-052": {...},
"B-ANG-056": {...},
...
},
{
"semester": 1,
"modules": {
"BSU-CPR-125": {...},
"BSU-BPR-098": {...},
...
},
...
[
问题是,对象 B-ANG-052
、B-ANG-056
、BSU-CPR-125
和 BSU-BPR-098
是同一类型,但它们的数量和名称不同,我无法在查询前预测他们的姓名和号码.
理想情况下,我希望能够创建类似
的东西
public class ModuleRessource
{
// B-ANG-052 & Co stuff
}
public class Modules
{
public List<ModuleRessource> Modules { get; set; }
}
public class RootObject
{
public int semester { get; set; }
public Modules Modules { get; set; }
}
但显然 Json.Net 在我尝试这样做时抛出异常。
我非常感谢能就此事提供帮助,因为我一直找不到任何线索。
提前致谢!
public class Modules
{
public List<ModuleRessource> Modules { get; set; }
}
将此更改为:
public class Modules {
public Dictionary<string, someObject> { get; set; }
}
someObject
应该是 {...}
中带有键 B-ANG-052
的任何内容。当然,这只有在键是唯一的情况下才有效。然后你可以获取字典的键并使用它们循环并获取 someObject
。我真的不知道您将如何能够创建一个对象并在不知道该对象的名称的情况下使用该对象。如果 {...}
始终相同,则创建一个 class 并将其反序列化为字典中的 someObject
。
您也可以尝试使用动态类型,但您仍然会 运行 陷入不知道调用什么对象的问题。您将使用反射循环遍历主对象的属性,然后检索它们。
我正在尝试解析来自 RESTfull Api 的 JSON 答案。我通常使用 NewtonSoft Json.Net 来反序列化对象(借助 Json2Csharp 等工具)。
虽然这一次,我从网络服务得到的答案更复杂。
答案如下:(查看完整答案here)
[
{
"semester": 0,
"modules": {
"B-ANG-052": {...},
"B-ANG-056": {...},
...
},
{
"semester": 1,
"modules": {
"BSU-CPR-125": {...},
"BSU-BPR-098": {...},
...
},
...
[
问题是,对象 B-ANG-052
、B-ANG-056
、BSU-CPR-125
和 BSU-BPR-098
是同一类型,但它们的数量和名称不同,我无法在查询前预测他们的姓名和号码.
理想情况下,我希望能够创建类似
的东西public class ModuleRessource
{
// B-ANG-052 & Co stuff
}
public class Modules
{
public List<ModuleRessource> Modules { get; set; }
}
public class RootObject
{
public int semester { get; set; }
public Modules Modules { get; set; }
}
但显然 Json.Net 在我尝试这样做时抛出异常。
我非常感谢能就此事提供帮助,因为我一直找不到任何线索。
提前致谢!
public class Modules
{
public List<ModuleRessource> Modules { get; set; }
}
将此更改为:
public class Modules {
public Dictionary<string, someObject> { get; set; }
}
someObject
应该是 {...}
中带有键 B-ANG-052
的任何内容。当然,这只有在键是唯一的情况下才有效。然后你可以获取字典的键并使用它们循环并获取 someObject
。我真的不知道您将如何能够创建一个对象并在不知道该对象的名称的情况下使用该对象。如果 {...}
始终相同,则创建一个 class 并将其反序列化为字典中的 someObject
。
您也可以尝试使用动态类型,但您仍然会 运行 陷入不知道调用什么对象的问题。您将使用反射循环遍历主对象的属性,然后检索它们。