我有以下代码:
return (DataTable)JsonConvert.DeserializeObject(_data, (typeof(DataTable)));
然后,我试过了:
var jsonSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
return (DataTable)JsonConvert.DeserializeObject<DataTable>(_data, jsonSettings);
返回行引发错误:
{&#34;错误转换价值\&#34; \&#34;输入&#39; System.Double&#39;。&#34;}
许多在线解决方案建议使用可空类型创建自定义Class
,但这对我来说不起作用。我不能指望json采用某种格式。我无法控制列数,列类型或列名。
答案 0 :(得分:103)
您可以向JsonConvert.DeserializeObject
提供设置,告诉它如何处理空值,在这种情况下,等等:
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore
};
var jsonModel = JsonConvert.DeserializeObject<Customer>(jsonString, settings);
答案 1 :(得分:2)
您可以订阅“错误”事件并根据需要忽略序列化错误。
static void Main(string[] args)
{
var a = JsonConvert.DeserializeObject<DataTable>("-- JSON STRING --", new JsonSerializerSettings
{
Error = HandleDeserializationError
});
}
public static void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
{
var currentError = errorArgs.ErrorContext.Error.Message;
errorArgs.ErrorContext.Handled = true;
}
答案 2 :(得分:0)
可接受的答案非常有效。但是为了使答案全局适用,请在startup.cs
中执行以下操作:
services.AddControllers().AddNewtonsoftJson(options =>
{
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
答案已经在.Net Core 3.1项目中进行了测试。