c# - 如何反序列化 MediaWiki API 结果 C#
问题描述
我正在尝试反序列化此 json 响应:https ://en.wikipedia.org/w/api.php?action=opensearch&search=zyz&limit=1&namespace=0&format=jsonfm
当我反序列化它时,我不确定我的 C# 对象应该是什么样子。这就是我目前所拥有的:
public class test
{
public string search { get; set; }
public List<string> title = new List<string>();
public List<string> uk = new List<string>();
public List<string> link = new List<string>();
}
当我尝试将它反序列化为这个对象时,我得到了一个异常。谁能帮帮我?
解决方案
如果您不热衷于使用 Wikipedianet,那么您可以创建一个方法来解析结果,如下所示。
public IEnumerable<Result> GetResult(string json)
{
var parsedResult = JsonConvert.DeserializeObject<List<dynamic>>(json);
if(parsedResult.OfType<JArray>().Any())
{
for(var i=0;i<parsedResult.OfType<JArray>().First().Count();i++)
{
var returnValue = new Result();
returnValue.SearchTerm = parsedResult.First();
returnValue.Key = parsedResult.Skip(1).First()[i].Value;
returnValue.Description = parsedResult.Skip(2).First()[i].Value;
returnValue.Url = parsedResult.Skip(3).First()[i].Value;
yield return returnValue;
}
}
else
yield return null;
}
其中 Result 定义为
public class Result
{
public string SearchTerm{get;set;}
public string Key{get;set;}
public string Description{get;set;}
public string Url{get;set;}
}
输出
当您在 Json 中有多个结果时,这可能很有用(当 url 参数limit
设置为超过 1 时)
推荐阅读
- javascript - 路由。你如何转移财产?
- multithreading - 什么是 FIFO 存储缓冲区中的本地绕过?
- python - 实现两个二维数组之间的加权平均
- python - 使此代码更短的最佳(或最快)方法是什么?
- ag-grid - 分组处于活动状态时,ensureIndexVisible 不起作用
- r - 在分段数据上循环分层函数
- content-management-system - 如何将自定义 JSON 代码添加到 Magento 2?
- android - 每次打开我的活动时,回收商都会查看重复的项目
- java - 如何在maven中使用外部dll添加目录的路径
- vb.net - 编写 VB.Net 代码以循环浏览所有 Microsoft Access 表单等,以将它们导出为文本