首页 > 解决方案 > 如何反序列化 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>();
    }

当我尝试将它反序列化为这个对象时,我得到了一个异常。谁能帮帮我?

标签: c#json

解决方案


如果您不热衷于使用 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 时)


推荐阅读