[英]How can I deserialize a json string in to a model?
大家好,
像下面這樣的 json 模型讓我通過 api 返回。
{
"data": [
{
"countryStats": {
"order": 2,
"confirmedCount": 15679,
"deathCount": 277,
"recovryCount": 333,
"name": "Türkiye"
},
"cityStats": [
]
},
{
"countryStats": {
"order": 1,
"confirmedCount": 216722,
"deathCount": 5138,
"recovryCount": 8672,
"name": "Amerika Birleşik Devletleri"
},
"cityStats": [
{
"order": 1,
"confirmedCount": 84070,
"deathCount": 1941,
"recovryCount": 0,
"name": "New York"
},..
我正在使用以下代碼提取此 json 數據。
static string GET(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.GetEncoding("utf-8"));
String errorText = reader.ReadToEnd();
// log errorText
}
throw;
}
}
這是我的字符串表達式。 我想將此字符串表達式分配給我的模型,我該怎么做。
我的模型
public class CountryStats
{
public int Order { get; set; }
public int ConfirmedCount { get; set; }
public int DeathCount { get; set; }
public int RecovryCount { get; set; }
public string Name { get; set; }
public List<CountryStats> CityStats { get; set; }
}
我正在嘗試像這樣翻譯它
var result = JsonConvert.DeserializeObject<List<CountryStats>>(res);
但我收到一個錯誤
您必須將模型更改為此
public class BaseClass
{
public List<CountryStats> Data { get; set; }
}
public class CountryStats
{
public int Order { get; set; }
public int ConfirmedCount { get; set; }
public int DeathCount { get; set; }
public int RecovryCount { get; set; }
public string Name { get; set; }
public List<CountryStats> CityStats { get; set; }
}
然后反序列化對BaseClass
響應
var result = JsonConvert.DeserializeObject<BaseClass>(res);
更新
試試這個反序列化土耳其語單詞
res = res.Replace("\"","'");
var result = JsonConvert.DeserializeObject<BaseClass>(res);
或者
var result = HttpUtility.JavaScriptStringEncode(JsonConvert.DeserializeObject<BaseClass>(res));
問題是你的模型。 它應該如下所示。
public class CountryStatsCollection
{
public List<ContryStats> Data { get; set }
}
public class CountryStats
{
public int Order { get; set; }
public int ConfirmedCount { get; set; }
public int DeathCount { get; set; }
public int RecovryCount { get; set; }
public string Name { get; set; }
public List<CountryStats> CityStats { get; set; }
}
除了其他答案之外,如果您不確定某些字段是否為空,這將有所幫助:
public partial class Welcome
{
[JsonProperty("data", NullValueHandling = NullValueHandling.Ignore)]
public List<Datum> Data { get; set; }
}
public partial class Datum
{
[JsonProperty("countryStats", NullValueHandling = NullValueHandling.Ignore)]
public CountryStats CountryStats { get; set; }
[JsonProperty("cityStats", NullValueHandling = NullValueHandling.Ignore)]
public List<object> CityStats { get; set; }
}
public partial class CountryStats
{
[JsonProperty("order", NullValueHandling = NullValueHandling.Ignore)]
public long? Order { get; set; }
[JsonProperty("confirmedCount", NullValueHandling = NullValueHandling.Ignore)]
public long? ConfirmedCount { get; set; }
[JsonProperty("deathCount", NullValueHandling = NullValueHandling.Ignore)]
public long? DeathCount { get; set; }
[JsonProperty("recovryCount", NullValueHandling = NullValueHandling.Ignore)]
public long? RecovryCount { get; set; }
[JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
public string Name { get; set; }
}
然后你可以反序列化它:
var result = JsonConvert.DeserializeObject<Welcome>(res);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.