簡體   English   中英

C#復雜的Json反序列化

[英]C# Complex Json Deserialization

我無法使用現有的已回答問題創建一個可行的解決方案。

我成功使用以下c#類

public class country
{
    public string country_id;
    public string country_name;
}

使用以下代碼。 結果是一個國家列表

List<country> countries = new List<country>();  
var streamTask = client.GetStreamAsync("https://xxx");
var serializer = new DataContractJsonSerializer(typeof(List<country>));
countries = serializer.ReadObject(await streamTask) as List<country>;

但是 :現在我更改了API,但得到的結果是我不知道如何創建使用相同代碼的類。

這是API調用的結果:

{
 "api":{
   "results": 2
   "countries":{
     "1":"Austria"
     "2":"Germany"
    }
  }
}

它是一個嵌套對象,“國家”甚至沒有屬性名稱。

如何反序列化此結果?

首先,您需要更改數據合同:

public class apiResults
{
    public int results;
    public countries countries;
}

public class apiResponse
{
    public apiResults api;
}

[DataContract]
public class countries
{
    [DataMember(Name="1")]
    public string Country1 {get; set;}
}

然后像以前一樣使用它:

var serializer = new DataContractJsonSerializer(typeof(apiResponse));
var result = serializer.ReadObject(stream) as apiResponse;

Console.WriteLine(result.api.countries.Country1);

這里的問題是您對可用國家/地區的數量進行了硬編碼。 更好的方法是將您的新國家/地區分類反序列化。

如果您可以使用NewtonsoftJson-解決方案將更加容易:

public class apiResults
{
    public int results;
    public Dictionary<int, string> countries { get; set; }
}

public class apiResponse
{
    public apiResults api;
}

和用法:

var result = JsonConvert.DeserializeObject<apiResponse>(responseAsString);
Console.WriteLine(result.api.countries[1]);

暫無
暫無

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

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