Asp.net Web Api未将json空字符串值转换为null
Json示例: {“字段1”:“”“字段2”:null} 在MVC中,默认情况下Field1将转换为null。 我尝试了[DisplayFormat(ConvertEmptyStringToNull=true)]属性(无论如何都应该是默认值),但没有任何区别 我正在使用WebAPI2.1 有什么想法吗?在C#中,空字符串与空引用不同,而json.NET(底层json实现)决定避免自动转换 您可以添加以下自定义转换器来处理此问题Asp.net Web Api未将json空字符串值转换为null,asp.net,json,asp.net-web-api,Asp.net,Json,Asp.net Web Api,Json示例: {“字段1”:“”“字段2”:null} 在MVC中,默认情况下Field1将转换为null。 我尝试了[DisplayFormat(ConvertEmptyStringToNull=true)]属性(无论如何都应该是默认值),但没有任何区别 我正在使用WebAPI2.1 有什么想法吗?在C#中,空字符串与空引用不同,而json.NET(底层json实现)决定避免自动转换 您可以添加以下自定义转换器来处理此问题 public class EmptyToNullConverter
public class EmptyToNullConverter : JsonConverter
{
private JsonSerializer _stringSerializer = new JsonSerializer();
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
string value = _stringSerializer.Deserialize<string>(reader);
if (string.IsNullOrEmpty(value))
{
value = null;
}
return value;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
_stringSerializer.Serialize(writer, value);
}
}
您可以将此转换器添加到config.Formatters.JsonFormatter.SerializerSettings.Converters
中,它将应用于所有字符串。请注意,它需要私有成员_stringSerializer,否则它将堆栈溢出。如果直接装饰字符串属性,则不需要该成员
在WebApiConfig.cs中添加以下行:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new EmptyToNullConverter());
在C#中,空字符串与空引用不同,而作为底层json实现的json.NET决定避免自动转换
您可以添加以下自定义转换器来处理此问题
public class EmptyToNullConverter : JsonConverter
{
private JsonSerializer _stringSerializer = new JsonSerializer();
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
string value = _stringSerializer.Deserialize<string>(reader);
if (string.IsNullOrEmpty(value))
{
value = null;
}
return value;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
_stringSerializer.Serialize(writer, value);
}
}
您可以将此转换器添加到config.Formatters.JsonFormatter.SerializerSettings.Converters
中,它将应用于所有字符串。请注意,它需要私有成员_stringSerializer,否则它将堆栈溢出。如果直接装饰字符串属性,则不需要该成员
在WebApiConfig.cs中添加以下行:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new EmptyToNullConverter());
你能解释一下它为什么会堆栈溢出吗?好问题,我不记得了,你可以不用额外的字段就试一下,然后捕获CallStack你能解释一下它为什么会堆栈溢出吗?好问题,我不记得了,你可以不用额外的字段就试一下,然后捕获CallStack注意MVC DisplayFormat对WebAPI没有影响,这是两个独立的框架。请注意,MVC DisplayFormat对WebAPI没有影响,这是两个独立的框架。