Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
C# 当使用newtonsoft json.net反序列化字符串时,如何将空字符串转换为null以表示可为null的int?_C#_Nullable_Json.net - Fatal编程技术网

C# 当使用newtonsoft json.net反序列化字符串时,如何将空字符串转换为null以表示可为null的int?

C# 当使用newtonsoft json.net反序列化字符串时,如何将空字符串转换为null以表示可为null的int?,c#,nullable,json.net,C#,Nullable,Json.net,例如,如果我有 public class MyClass { public Int32? Id { get;set; } public string Description { get;set; } } 我的json字符串如下所示: "{\"Id\":\"\",\"Description\":\"test\"}" 我得到错误“无法将字符串转换为整数”正如svick所说,您应该改为修复Json。但是,如果它是您无法控制的外部Json,那么您可以使用JsonConverter p

例如,如果我有

public class MyClass
{
    public Int32? Id { get;set; }
    public string Description { get;set; }
}
我的json字符串如下所示:

"{\"Id\":\"\",\"Description\":\"test\"}"

我得到错误“无法将字符串转换为整数”

正如svick所说,您应该改为修复Json。但是,如果它是您无法控制的外部Json,那么您可以使用JsonConverter

public class StringToNIntConverter : JsonConverter
{

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(int?);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.Null)
            return null;
        if (reader.TokenType == JsonToken.Integer)
            return reader.Value;

        if (reader.TokenType == JsonToken.String)
        {
            if (string.IsNullOrEmpty((string)reader.Value))
                return null;
            int num;
            if (int.TryParse((string)reader.Value, out num))
                return num;

            throw new JsonReaderException(string.Format("Expected integer, got {0}", reader.Value));
        }
        throw new JsonReaderException(string.Format("Unexcepted token {0}", reader.TokenType));
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(value);
    }
}

public class MyClass
{
    [JsonConverter(typeof(StringToNIntConverter))]
    public Int32? Id { get; set; }
    public string Description { get; set; }
}

这个值是一个字符串,你不能修复JSON吗?而且,它实际上对我有效,我没有得到任何错误。你能发布重现你问题的准确代码吗?您使用的是哪个版本的JSON.NET?返回到版本4.0.4是可行的。它现在允许为可为null的int传递null。感谢大家的回复。使用Json.NET的4.5版,我发现reader.Value返回一个long,因此我必须更改return reader.Value;返回Convert.ToInt32(reader.Value);