您可以通过使用JsonConverter 来处理将string 解析为可以为空的long? 的逻辑来实现此目的。
第一个使用 Newtonsoft.Json 的例子
public class NewtonsoftStringToLongJsonConverter : Newtonsoft.Json.JsonConverter
{
public override bool CanConvert(Type objectType)
{
throw new NotImplementedException();
}
public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
{
var value = (string)reader.Value;
if (string.Equals("null", value, StringComparison.InvariantCultureIgnoreCase))
{
return null;
}
if (!long.TryParse(value, out var parsedValue))
{
return null;
}
return parsedValue;
}
public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
您的模型更新为
public class Class1
{
public string Name { get; set; }
[Newtonsoft.Json.JsonConverter(typeof(NewtonsoftStringToLongJsonConverter))]
public long? Id { get; set; }
}
第二个选项使用 System.Text.Json 实现。
public class SystemTextStringToLongJsonConverter : System.Text.Json.Serialization.JsonConverter<long?>
{
public override bool CanConvert(Type typeToConvert)
=> typeToConvert == typeof(long?);
public override long? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var value = reader.GetString();
if(string.Equals("null", value, StringComparison.InvariantCultureIgnoreCase))
{
return null;
}
if(!long.TryParse(value, out var parsedValue))
{
return null;
}
return parsedValue;
}
public override void Write(Utf8JsonWriter writer, long? value, JsonSerializerOptions options)
{
throw new NotImplementedException();
}
}
最后,您的模型更新为
public class Class1
{
public string Name { get; set; }
[Newtonsoft.Json.JsonConverter(typeof(NewtonsoftStringToLongJsonConverter))]
public long? Id { get; set; }
}