Web Api不将json空字符串值转换为null

时间:2014-04-25 01:09:10

标签: asp.net json asp.net-web-api

示例Json: { “字段1”: “”, “字段2”:空}。

在MVC中,默认情况下Field1将被转换为null。 我尝试了[DisplayFormat(ConvertEmptyStringToNull = true)]属性(无论如何都应该是默认值)并且它没有什么区别。

我正在使用Web Api 2.1

有什么想法吗?

1 个答案:

答案 0 :(得分:11)

在C#中,空字符串与空引用不同,json.NET是底层json实现决定避免自动转换。

您可以添加以下自定义转换器来处理

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。如果直接装饰字符串属性,则不需要该成员。

在WebApiConfig.cs中

添加以下行:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new EmptyToNullConverter());