[英]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.