我有一個通過 POST 接收 JSON 的 webapi。有時一個雙精度值可能會以空值到達,所以像這樣
class A
{
public double val {get; set;}
}
那么傳入的 json 可能是 { "val": null }
我收到決議錯誤,因為 null 不能應用于 double。在過去的日子里,我會添加這個
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
來自 Newtonsoft 庫。但是我現在使用 System.Text.Json。有沒有類似的東西?我什么也沒找到。在一個地方我在這里使用它
[System.Text.Json.Serialization.JsonConverter(typeof(MyJsonConverter))]
但這對于單個雙值來說似乎有點矯枉過正。
順便說一句:如果可能的話,我想避免設定雙空值,否則我將不得不.GetValueOrDefault()在多個地方使用,這看起來很難看
uj5u.com熱心網友回復:
由于您加載的資料可以提供可為 null 的值,因此將屬性型別設定為 是有意義的double?。您可以GetValueOrDefault()通過修改 getter 以在值為 時立即回傳默認值來解決null。
這個問題可能是重復的;但是,由于代表較低,我無法將其標記為這樣。這是我發現的一個類似問題:How to deal with nullable reference types with System.Text.Json?
以下是我找到的其他鏈接:
- https://www.conradakunga.com/blog/handling-null-and-empty-strings-with-system-text-json/
- https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions.ignorenullvalues?view=net-6.0
uj5u.com熱心網友回復:
好吧,恐怕這不是您想要的方式。
可能的選擇——
使您的財產本身可以為空 [應該在理想情況下完成]。
- 你已經推遲了。
在 JSON 序列化選項中使用IgnoreNullValues選項:
services.AddControllers() .AddJsonOptions(x=> { x.JsonSerializerOptions.IgnoreNullValues = true; });
- 但是,此選項的缺點是它還會在序列化期間從回應文本中洗掉空屬性(即它們的名稱)。其中,我想您想為您的客戶端/UI 應用程式做些什么。
在我看來,您不應該允許您的 API 接受屬性不接受的值(例如,double 型別屬性為 null)。
因此,您需要將屬性更改為可為空或使用自定義轉換器來處理您的特定場景。
uj5u.com熱心網友回復:
如果您不想使用無錯誤的序列化程式,只需讓您的屬性可以為空,并在代碼中的其他地方為您制造另一個問題
public double? val {get; set;}
或嘗試此解決方法
[JsonPropertyName("val")]
public double? _value { private get; set; }
public double Val
{
get { return _value == null ? 0 : (double)_value; }
set { _value = value; }
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/400091.html
