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

本文关键字:null 字符串 int 转换 newtonsoft json net 反序列化 | 更新日期: 2023-09-27 18:28:53

例如,如果我有

public class MyClass
{
    public Int32? Id { get;set; }
    public string Description { get;set; }
}

我的json字符串如下:

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

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

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

正如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; }
}