首页 > 解决方案 > Newtonsoft.Json 跳过无效对象,继续反序列化

问题描述

如何跳过/忽略/处理 Newtonsoft JSON 中的无效 json 对象?

假设我们有如下字符串:

[{
    "$id": "xc1",
    "sdfdsgds0sdfsadgdxc,sfgsagdfgdsfdm",
    "gxcgdfs"
}, {
    "$id": "2",
    "Property1": "Value",
    "Property2": "Value2"
}]

在做的时候

JsonConvert.DeserializeObject<T>(jsonString);

所以第一个对象无效但我想读取第二个有效对象,但我有 JsonReaderException,有没有办法实现忽略/跳过数组中的无效对象并进一步反序列化?

标签: c#jsonjson.netdeserialization

解决方案


我在获取序列化 JSON 字符串时使用 JsonSerializerSettings 类来确定错误。

var settings = new JsonSerializerSettings
{
    Error = (obj, args) =>
    {
        var contextErrors = args.ErrorContext;
        contextErrors.Handled = true;
    }
};
var result = streamReader.ReadToEnd();
List<ViewModel> viewModel = JsonConvert.DeserializeObject<List<viewModel>>(result, settings);

推荐阅读