繁体   English   中英

从API解析JSON-C#

[英]Parsing JSON from API - C#

我正在从标准Web服务请求JSON,因此我需要处理响应,以便可以使用对象。 我在Xamarin Studio中工作-并不是我认为那很重要。

您可以通过以下网址查看来自Web服务的结果: https : //dawa.aws.dk/vejnavne/autocomplete?q= due这是在丹麦请求带有“ due”字样的街道名称。

    public async Task doAsyncAddress(string input)
    {
        var template = "https://dawa.aws.dk/vejnavne/autocomplete?q={0}";
        var url = string.Format(template, input);

        using (var httpClient = new HttpClient())
        {
            try
            {
                Task<HttpResponseMessage> getResponse = httpClient.GetAsync(url);

                HttpResponseMessage response = await getResponse;
                var responseJsonString = await response.Content.ReadAsStringAsync();

                /*

我在这里尝试了不同的方法,使用了JsonConvert和JObject,但是都没有用。 我可以看到字符串,所以我知道它在那儿。但是它的格式不正确。

            */
            }
            catch (Exception ex)
            {
                string message = ex.Message;
                return message;
            }
        }

    }

使用JsonConverter.DeserializeObject我这样做:

     var adress = JsonConvert.DeserializeObject<List<Address>>(responseJsonString);

地址:

public class Address
{
    public string tekst { get; set; }
    public List<Vejnavne> vejnavn
    { get; set; }
}

public class Vejnavne
{
    public string href { get; set; }
    public string navn { get; set; }
}

响应是:

“无法反序列化当前JSON对象(例如{\\“ name \\”:\\“ value \\”})为类型'System.Collections.Generic.List`1 [MinEjendom.Vejnavne]',因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。\\ n要解决此错误,可以将JSON更改为JSON数组(例如[1,2,3]),也可以更改反序列化类型,使其成为普通的.NET类型(例如,不是可以从JSON对象反序列化的诸如整数之类的原始类型,而不是诸如数组或List之类的集合类型),还可以将JsonObjectAttribute添加到该类型中以强制其对JSON对象的反序列化代码反序列化。 [0] .vejnavn.href',第5行,位置11。”

有了JObject,我得到:

“从JsonReader读取JObject时出错。当前的JsonReader项不是对象:StartArray。Path,第1行,位置1。”

您的C#代码错误。 这是正确的:

public class Vejnavn
{
    public string href { get; set; }
    public string navn { get; set; } // not List<Vejnavne> vejnavn
}

public class Address
{
    public string tekst { get; set; }
    public Vejnavn vejnavn { get; set; }
}

然后这样称呼它:

var adress = JsonConvert.DeserializeObject<List<Address>>(responseJsonString);

使用JSON时,您是.NET开发人员,最后-您必须将JSON转换为C#类,您应该使用Edit-> Paste Special-> Paste JSON作为类。 这是一个很棒的工具:)

您的代码是错误的。 这是从JSON生成的类:

public class Class1
{
    public string tekst { get; set; }
    public Vejnavn vejnavn { get; set; }
}

public class Vejnavn
{
    public string href { get; set; }
    public string navn { get; set; }
}

成功生成代码后,可以重命名该类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM