C# JSON将空字符串设置为null

C# JSON将空字符串设置为null,c#,.net,json,null,json.net,C#,.net,Json,Null,Json.net,在JSON中,空字符串通常被解析为null,但我有一个请求,其中包含: "StreetValue":"", 在我的类中,它被反序列化为十进制 public decimal StreetValue { get; set; } 但当我传递空字符串时,它将反序列化为0.00M而不是null。我错过了什么 我的目的是仅当传递了“0.00M”时才将其反序列化为0,否则它应为null。尝试将属性标记为可为null的类型(请注意问号): 这是因为string是一个引用类型,而decimal是一个值类型,所

在JSON中,空字符串通常被解析为null,但我有一个请求,其中包含:

"StreetValue":"",
在我的类中,它被反序列化为十进制

public decimal StreetValue { get; set; }
但当我传递空字符串时,它将反序列化为0.00M而不是null。我错过了什么


我的目的是仅当传递了“0.00M”时才将其反序列化为0,否则它应为null。

尝试将属性标记为可为null的类型(请注意问号):


这是因为string是一个引用类型,而decimal是一个值类型,所以不能将其赋值为null;相反,您的属性将收到
默认值(十进制)

正如Steve所说,您可以使您的属性为空:

decimal?属性{get;set;}


这将允许您随心所欲地使用null。

尝试将属性设置为
动态
,这样您就不需要声明数据类型,也不必担心
null

public dynamic StreetValue { get; set; }
编辑:

在c#6.0中,属性初始化将可用:

public decimal StreetValue { get; set; } = 0.0;

decimal
不可为null,您不能将
null
赋值给
decimal
。这意味着您丢失了属性的类型,因此不是很有用。@Steve您以前使用过吗?@GilliVilla如果您没有在该属性中获取值作为我的答案,则在反序列化时您会得到
null或空字符串
public decimal StreetValue { get; set; } = 0.0;