如何从统一反序列化json.net中获取多个/嵌套类返回值?

时间:2016-08-21 07:00:07

标签: c# unity3d json.net

一些背景知识:我的json数据来自查询mysql数据库的php脚本。我有一个命令结果的类,比如成功或失败。我有另一个类,它将包含查询的实际结果。

if (o is string)
{
    return "'" + o + "'";
}
if (o is bool)
{
    bool value = (bool) o;
    return value ? "1" : "0";
}
// Are you sure you want this? I would throw an exception if you
// don't know what to do with the value...
return "'" + o + "'";

我想我应该能够遍历jsonResults结果arraylist来填充一个新的HeroDetails,但我似乎无法找到它。

示例json数据

public class jsonResults {
    public int success { get; set; }
    public string message { get; set; }
    public ArrayList resultArray { get; set; }
}

public class HeroDetails {
    public int id { get; set; }
    public string name { get; set; }
}

此代码让我可以访问成功和消息,但我没有找到任何方法将数组结果放入我的列表中。

{
    "success": 1,
    "message": "Data Available!",
    "resultArray":[
        { "id": "26", "name": "Hero1" },
        { "id": "13", "name": "Hero2" },
        { "id": "1", "name": "Hero3" },
        { "id": "18", "name": "Hero4" }
    ]
}

2 个答案:

答案 0 :(得分:3)

你的arraylist有问题!!你可以使用json2csharp

public class ResultArray
{
    public string id { get; set; }
    public string name { get; set; }
}

public class RootObject
{
    public int success { get; set; }
    public string message { get; set; }
    public List<T> resultArray { get; set; }
}

答案 1 :(得分:2)

您的JSON响应可以包含通用数据,因此您需要一个通用结果类。

public class jsonResults<T> {
    public int success { get; set; }
    public string message { get; set; }
    public List<T> resultArray { get; set; }
}

此外,您必须知道您希望反序列化它的类型是什么类型。

jsonResults<HeroDetails> r = JsonConvert.DeserializeObject<jsonResults<HeroDetails>>(json);