Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Web Api未将json空字符串值转换为null_Asp.net_Json_Asp.net Web Api - Fatal编程技术网

Asp.net Web Api未将json空字符串值转换为null

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

Json示例: {“字段1”:“”“字段2”:null}

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

我正在使用WebAPI2.1

有什么想法吗?

在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);
    }
}
您可以将此转换器添加到
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没有影响,这是两个独立的框架。