我有以下回應結構,它將在 API 呼叫后序列化。
public class Details
{
public string firstName { get; set; }
}
public class Result
{
public int maxTry { get; set; }
public int minTry { get; set; }
public List<Details> aggr { get; set; }
public List<string> features { get; set; }
public string zone { get; set; }
}
[Serializable]
public class Root
{
public List<Result> result { get; set; }
}
我有以下物件陣列,它是 API 回應。
"result": [
{
“maxTry: 17,
"minTry”: 10,
"details": [
{
“firstName”: “Sam”,
},
{
"firstName”: ”Julio”,
}
],
"aggr": [
“Abc”,
],
"zone": “D3”
},
{
"aggr": [
"Abc",
],
"zone": “C3”
},
{
"aggr": [
"Abc",
],
"zone": “B2”
},
]
}
問題是即使某些物件在回應中沒有maxTry和minTry屬性,當我按如下方式反序列化回應時,
var jobject = JsonConvert.DeserializeObject<Root>(res);
我仍然得到輸出maxTry并minTry默認為 0。可以改為默認為null
uj5u.com熱心網友回復:
當然,通過在后面加上一個問號使它們可以為空整數 int
[JsonProperty("maxTry")] //newtonsoft
public int? MaxTry { get; set; }
[JsonProperty("minTry")]
public int? MinTry { get; set; }
JsonProperty 屬性讓您可以將 c# 屬性命名為與 json 不同的名稱,因此無論 json 是什么樣子,您都可以保持 c# 命名約定。如果您使用 System.Text.Json 它是 JsonPropertyName 代替
你的整數出現 0 的原因是整數是值型別,這基本上意味著它們必須有一個值并且不能為空。int 的默認值為 0;即使您從未為 MaxTry 設定值,它的值為 0
var r = new Result();
Console.WriteLine(r.MaxTry); //prints 0
可空整數更難處理,因為它們可能為空;if(r.MaxTry.HasValue)在對它們做一些事情之前,您需要檢查是否要查看它是否為空。在某種程度上,您可能想要重新考慮將它們保留為整數并將 0 視為它們不存在。它可能適用于您的背景關系,例如:
for(int try = 0; try < result.MaxTry; try )
如果 MaxTry 為 0,這將不會運行。
uj5u.com熱心網友回復:
將這些屬性更改為 nullable int
public int? maxTry { get; set; }
public int? minTry { get; set; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370945.html
標籤:C# asp.net-mvc
上一篇:c#回傳字串串列和泛型串列
