【发布时间】:2021-12-13 14:55:46
【问题描述】:
如果存在空字符串,Json.Net 会将 ints/floats 中的空字符串转换为 0。我在输入中使用数字类型,但空字段将是表单发布调用中的空字符串。是否有将空字符串转换为 Null 或 0 的配置,如 Json.net ?
【问题讨论】:
标签: c# .net system.text.json
如果存在空字符串,Json.Net 会将 ints/floats 中的空字符串转换为 0。我在输入中使用数字类型,但空字段将是表单发布调用中的空字符串。是否有将空字符串转换为 Null 或 0 的配置,如 Json.net ?
【问题讨论】:
标签: c# .net system.text.json
让值可以为空
public class Model
{
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
public int? Value { get; set; }
}
结果是
{ value: null }
您将无法在现实生活中创建您的提琴手 json
string json = "{\"Value\":\"\"}";
但如果是你的 scholl 项目,你可以使用 Newtonsoft.Json 反序列化它(安装 nuget 包)
Model d = JsonConvert.DeserializeObject<Model>(json);
Console.WriteLine("Value: " + d.Value);
string s =JsonConvert.SerializeObject(d);
Console.WriteLine("json: " + s);
}
输出
Value:
json: {"Value":null}
但如果您仍想使用 Text.Json,那么您将需要更改 Model 类
public class Model
{
private string _val;
[JsonPropertyName("Value")]
public string Val {
get { return string.IsNullOrEmpty(_val) ? null : _val; }
set { _val = value;}
}
[System.Text.Json.Serialization.JsonIgnore]
public int Value
{
get { return string.IsNullOrEmpty(Val) ? 0 : Convert.ToInt32(Val); }
set { Val = value==0? null: value.ToString(); }
}
}
输出
Value: 0
json: {"Value":null}
【讨论】: