c# - 将值“null”转换为类型“System.Nullable`1[System.Int64]”时出错
问题描述
我有一个 JSON 对象,其中包含一个null
as 字符串,这是无法避免的,当我将此对象发送到我的 API 时,我收到此错误消息
将值“null”转换为类型“System.Nullable`1[System.Int64]”时出错
我的示例 JSON
{
Name:'Test',
Id:'null'
}
我的模特/DTO
class Class1{
public string Name {get;set;}
public long? Id {get;set;}
}
解决方案
您可以通过使用 aJsonConverter
来处理将 a 解析string
为long?
可以为 null 的逻辑来实现这一点。
使用 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; }
}
推荐阅读
- npm - 无法在 MAC 终端中运行 NPM
- python - sqlite3操作错误异常
- google-sheets - 将生产力总数计算到主电子表格
- azure-ad-b2c - 索赔中缺少电子邮件 - 如何查找从 B2C 传递的内容并修复?
- python - 如何在抓取时删除输出中的引号?
- java - Java 从该类的字符串中声明一个类对象?
- json - 错误的请求 AJAX 发布到 Spring API
- javascript - 如何在 blob 类型中使用 UTF-8?
- wordpress - 如何禁用wordpress重定向
- c# - 当您有使用 REST 在线共享点的文件夹 URL 时,如何查找文件并获取 URL?