c# - 从 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
解决方案
从你的评论中我可以看出,你已经反序列化了。您只是在遍历对象模型时遇到了麻烦,这意味着整个 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...
}
推荐阅读
- javascript - Get a random integer between two given values that is seedable
- android - 如何将项目的包名称从 2 个子目录更改为 3 个。例如:“com.package”到“com.package.name”
- python - 如何使用 PySide 访问和编辑 svg 节点?
- php - 使用 $SQL 输出循环遍历数组值
- ansible - 使用 ansible 构建时在 Dockerfile 中设置相对路径
- wix - 如何使用带有 Burn (Wix) 的 pnputil 安装驱动程序
- java - 发生 JNI 错误 - Docker Oracle NoSQL 容器
- salesforce - 是否有适用于 ELSE 函数的行计数计数函数?
- javascript - android 手机问题(100vh 和位置固定页脚错误)
- javascript - 如何在使用 testcafe 运行测试之前单击按钮