示例Json: { “字段1”: “”, “字段2”:空}。
在MVC中,默认情况下Field1将被转换为null。 我尝试了[DisplayFormat(ConvertEmptyStringToNull = true)]属性(无论如何都应该是默认值)并且它没有什么区别。
我正在使用Web Api 2.1
有什么想法吗?
答案 0 :(得分:11)
您可以添加以下自定义转换器来处理
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);
}
}
并在您的类中使用它来装饰您想要转换的属性
[JsonConverter(typeof(EmptyToNullConverter))]
public string FamilyName { get; set; }
您可以将此转换器添加到config.Formatters.JsonFormatter.SerializerSettings.Converters
,它将适用于所有字符串。请注意,它需要私有成员_stringSerializer,否则它将stackoverflow。如果直接装饰字符串属性,则不需要该成员。
添加以下行:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new EmptyToNullConverter());