Skip to main content
 首页 » 编程设计

c#之从 Web API 在 C# 中解析 JSON.Net

2024年02月25日36lvdongjie

我正在尝试解析从 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 个“ worker ”,但这个数字可以变化,它们可以独立为 3 或 4(json 的其他部分保持不变)。 使用 PHP 我非常清楚如何解决这个问题,但在 C# 中我不太清楚,这是我用来解析它的代码(除了“律师”和“ worker ”之外我已经解析过......)

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 吗?正如我所说,“律师”或“ worker ”的数量是可变的。

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

请您参考如下方法:

从您的评论中我可以看出,您已经反序列化了它。你只是在遍历对象模型时遇到了麻烦,这意味着整个 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... 
}