解析不可预知类型名称的Json对象

时间:2015-04-05 15:34:06

标签: c# json.net

我正在尝试从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-052B-ANG-056BSU-CPR-125BSU-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显然会抛出一个Exeption。

我非常感谢有关此事的一些帮助,因为我找不到任何线索。

提前致谢!

1 个答案:

答案 0 :(得分:1)

public class Modules
{
    public List<ModuleRessource> Modules { get; set; }
}

将其更改为:

public class Modules {
    public Dictionary<string, someObject> { get; set; }
}

someObject应为{...}中密钥为B-ANG-052的任何内容。仅当键是唯一的时,这才有效。然后你可以抓住字典的密钥并使用它们循环并抓住someObject。我真的不知道你将如何能够创建一个对象并使用该对象而不知道该对象被调用了什么。如果{...}始终相同,请创建一个类并将其反序列化为字典中的someObject

你也可以尝试使用动态类型,但是你仍然会遇到不知道调用对象的问题。您将使用反射循环遍历主对象的属性,然后检索它们。