当前位置: 首页 > 面试题库 >

忽略JSON.NET数据解析期间的解析错误

司徒啸
2023-03-14
问题内容

我有一个具有预定义数据结构的对象:

public class A
{
    public string Id {get;set;}
    public bool? Enabled {get;set;}
    public int? Age {get;set;}
}

和JSON应该是

{ "Id": "123", "Enabled": true, "Age": 23 }

我想以肯定的方式处理JSON错误,并且每当服务器为定义的数据类型返回意外的值时,我都希望它被忽略并设置默认值(空)。

现在,当JSON部分无效时,我得到了JSON阅读器异常:

{ "Id": "123", "Enabled": "NotABoolValue", "Age": 23 }

而且我什么都没有。我想要的是获取一个对象:

new A() { Id = "123", Enabled = null, Age = 23 }

并分析警告(如果可能)。可以使用JSON.NET完成吗?


问题答案:

为了能够处理反序列化错误,请使用以下代码:

var a = JsonConvert.DeserializeObject<A>("-- JSON STRING --", new JsonSerializerSettings
    {
        Error = HandleDeserializationError
    });

HandleDeserializationError以下方法在哪里:

public void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
{
    var currentError = errorArgs.ErrorContext.Error.Message;
    errorArgs.ErrorContext.Handled = true;
}

HandleDeserializationError因为有在JSON字符串错误会被称为多次。导致错误的属性将不会初始化。



 类似资料:
  • 问题内容: 我已经来了一段时间,感觉好像logstash中的JSON过滤器正在为我删除数据。我最初是从https://www.digitalocean.com/community/tutorials/how- to-install-elasticsearch-logstash-and-kibana-elk-stack-on- ubuntu-14-04 跟随该教程的 我进行了一些更改,但基本相同。我

  • 我试图解析来自服务器的响应json。数据是一个对象数组,但有时服务器在数组的项之间发送一个布尔值。像这样: 正如你所看到的,他们之间有一个错误。 tnx提前。

  • 问题内容: 我正在与Json.Net解析数组。我正在尝试做的是将名称/值对从数组中拉出,并在解析JObject时将它们分配给特定的变量。 这是数组中的内容: 这是我在C#中获得的东西: 我是JSON和Json.Net的新手,因此它可能是其他人的基本解决方案。我基本上只需要在foreach循环中分配名称/值对,以便可以在前端输出数据。有人做过吗? 问题答案: 您可以这样获得数据值: 小提琴:http

  • 问题内容: 这是一个简单的场景。我想显示在我的网站上显示的两个值的减法: 谁能告诉我我在做什么错? 问题答案: 这是“按设计”。该函数将仅考虑字符串的各个部分,直到in达到非+,-,数字,指数或小数点为止。一旦看到逗号,它将停止查找并且仅考虑“75”部分。 要解决此问题,请将逗号转换为小数点。

  • 答案和文档显示有一个jackson注释,它应该允许日期格式。 在调用Rest-Service时,我将得到一个: 似乎注释被忽略了。调试解析方法模式设置为和。

  • Entry conn.GetAsync() 返回的是一个 Entry 集合,Entry 对应 binlog 记录,它可能是事务标记也有可能是行数据变化,通过 Entry.EntryType 来区分,一般事务的标记在业务消费处理时不需要处理。 示例: var entries = await conn.GetAsync(1024); foreach (var entry in entries) {