簡體   English   中英

ASP.NET Web API - 如何反序列化JSON

[英]ASP.NET Web API - How to deserialize a JSON

我正在嘗試使用API​​。

我想在對象中存儲以下Request: http://api.swissunihockey.ch/rest/v1.0/clubs/655
問題是,Object已初始化但所有值均為null。

我可以接收數據並生成一個字符串輸出。 但是對對象的反序列化不起作用。 你能幫我嗎?

private static async Task RunAsync()
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://api.swissunihockey.ch/rest/v1.0/clubs/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
        try
        {
            HttpResponseMessage response = await client.GetAsync("615");
            var club = await response.Content.ReadAsAsync<Club>();
            Console.WriteLine(club.Name);
            Console.Read();
        }
        catch (HttpRequestException e)
        {
            if (e.Source != null)
            {
                Console.WriteLine("HttpRequestException source: {0}", e.Source);
            }
        }
    }
}

這是我試圖存儲數據的Club類:

class Club
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Street { get; set; }
    public string Zip { get; set; }
    public string City { get; set; }
    public string Canton { get; set; }
    public string Phone { get; set; }
    public string Url { get; set; }
}

您需要另一個包含Club的課程,該課程將進一步反序列化。

class Response
{
    public Club Club { get; set; }
}

然后反序列化為

var res = await response.Content.ReadAsAsync<Response>();
var club = res.Club;

從響應中獲取字符串后,使用Web API已經從Nuget引用的包,通過Newtonsoft.Json 1引用Json.Net,並調用Club c = JsonConvert.Deserialize<Club>(responseString);

我發現這比已經提到的內置數據合同簡單得多。

嘗試查看與microsoft相關的文檔:

http://msdn.microsoft.com/en-us/library/hh674188.aspx

您需要創建數據協定,然后使用此合同處理請求。

例如,對於您來說,數據合同可能類似於:

    [DataContract]
    class Club
    {
        [DataMember(Name = "Id")]
        public int Id { get; set; }
        [DataMember(Name = "Name")]
        public string Name { get; set; }
        [DataMember(Name = "Street")]        
        public string Street { get; set; }
        [DataMember(Name = "Zip")]
        public string Zip { get; set; }
        [DataMember(Name = "City")]
        public string City { get; set; }
        [DataMember(Name = "Canton")]
        public string Canton { get; set; }
        [DataMember(Name = "Phone")]
        public string Phone { get; set; }
        [DataMember(Name = "Url")]
        public string Url { get; set; }
    }

然后查看文檔的“處理請求”章節來處理您的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM