首页 > 解决方案 > 从 Web API 解析 C# 中的 JSON.Net

问题描述

我正在尝试解析从 Web API 获得的 JSON,但我不知道如何正确执行,我正在学习 C#,我正在使用 JSON.Net,这是我的 JSON:

{
    "success": true,
    "result": {
        "id": "20429683581",
        "name": "CINEPLEX S.A",
        "Condition": "HABIDO",
        "PLE": "02\/01\/2013",
        "lawyers": [
            {
                "type": "DNI",
                "numdoc": "07871885",
                "name": "PONCE PINTO ALEJANDRO EDUARDO",
                "date": "22\/08\/2000"
            },
            {
                "type": "DNI",
                "numdoc": "09333203",
                "name": "SORIANO BARRANTES JOSE FERNANDO",
                "date": "22\/09\/2008"
            }
        ],
        "workers": [
            {
                "time": "2017-07",
                "service": "8"
            },
            {
                "time": "2018-06",
                "service": "13"
            }
        ]
    }
}

在示例中,API 返回了 2 个“律师”和 2 个“工人”,但这个数字可以变化,它们可以是 3 或 4 独立(json 的其他部分保持不变)。使用 PHP 我非常清楚如何解决这个问题,但在 C# 中我没有太多想法,这是我用来解析它的代码(我已经解析了“律师”和“工人”......)

public class Lawyer
{
    public string type { get; set; }
    public string numdoc { get; set; }
    public string name { get; set; }
    public string date { get; set; }
}

public class Worker
{
    public string time { get; set; }
    public string service { get; set; }
}

public class Result
{
    public string id { get; set; }
    public string name { get; set; }
    public string Condition { get; set; }
    public string PLE { get; set; }
    public List<Lawyer> lawyers { get; set; }
    public List<Worker> workers { get; set; }
}

public class RootObject
{
    public bool success { get; set; }
    public Result result { get; set; }
}

RootObject rootobject;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://www.example.com/api/?get=" + inid);
HttpWebResponse response;

try
{
    response = (HttpWebResponse)request.GetResponse();
    Stream stream = response.GetResponseStream();
    StreamReader reader = new StreamReader(stream);
    {
        var json = reader.ReadToEnd();
        rootobject = JsonConvert.DeserializeObject<RootObject>(json);
    }
    if (rootobject.success == true)
    {
        Console.WriteLine("---------------");
        Console.WriteLine("ID: " + rootobject.result.id);
        Console.WriteLine("NAME: " + rootobject.result.name);
        Console.WriteLine("CONDITION: " + rootobject.result.Condition);
        Console.WriteLine("PLE: " + rootobject.result.PLE);
    }
    else
    {
        Console.WriteLine("---------------");
        Console.WriteLine("NOTHING");
    }
}
catch (Exception)
{
    Console.WriteLine("---------------");
    Console.WriteLine("ERROR");
}

我应该在这里做什么?我必须像在 PHP 中那样使用 foreach 吗?正如我所说,“律师”或“工人”的数量是可变的。

pd:生成初始用户类 json2csharp.com

标签: c#jsonparsingjson.net

解决方案


从你的评论中我可以看出,你已经反序列化了。您只是在遍历对象模型时遇到了麻烦,这意味着整个 json.net 事情有点偏题,要遍历,只需执行类似的操作

rootobject.result.lawyers.ForEach(lawyer => Console.WriteLine($"{lawyer.name} {lawyer.type}");

或者你可以做

foreach(var lawyer in rootobject.result.lawyers) 
{
     Console.WriteLine($"{lawyer.name} {lawyer.type}");
}

或者如果您愿意,可以使用 for 循环

for(int i = 0; i<rootobject.result.lawyers.Count; i++)
{
   var lawyer = rootobject.result.lawyers[i];
   // print it...
}

推荐阅读