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);