最新版本中的异常消息更改

 XC一米_623 发布于 2023-02-06 18:21

我刚刚将Newtonsoft.Json库从4.5.1更新到5.0.8.我注意到的是其中一条异常消息发生了变化.一旦该值无法反序列化,我的400响应"错误转换值..."中包含以下内容.现在,这条消息在4.5.1中有所不同.lib的版本.问题是对象的全名是暴露的,这对我来说是一种不良行为.

为了澄清:

问题如下.直到Newtonsoft.Json库的4.5.1版本,抛出JsonSerializationException后,响应中的消息才指定某个对象无法序列化.从该版本开始,响应消息中的库,是的,它包括错误消息,但也包括它无法序列化的对象的全名.遗憾的是,我不想将错误消息中的命名空间暴露给外界.

我只是检查JSON lib的源代码,我发现StringEnumConverter中的代码现在是:

catch (Exception ex)
{
    throw JsonSerializationException.Create(reader, "Error converting value {0} to type '{1}'.".FormatWith(CultureInfo.InvariantCulture, MiscellaneousUtils.FormatValueForPrint(reader.Value), objectType), ex);
}

同时它抛出了默认值Enum.Parse ArgumentException,并显示消息"必须指定有效信息以便在字符串中进行解析".之前.

现在,我更喜欢这条消息,因为它没有向用户显示我的API的内部命名空间.

我试图在我的Application_Start方法中挂起事件JsonFormatter.SerializerSettings.Error,但是我无法做我想做的事情.我有机会访问我想要处理的异常,

private static void Error(object sender, ErrorEventArgs errorEventArgs)
{
    if (errorEventArgs.ErrorContext.Error.GetType() == typeof(JsonSerializationException))
    {

但是所有属性都是只读的,我认为要修改的对象标记为内部.重新抛出异常也不是一个例子.

为清楚起见,请查看Newtonsoft.Json.Net40项目中的类StringEnumConverterJsonSerializerInternalBase类.

您是否知道在哪里挂钩有问题的库以覆盖错误消息?或者关于如何解决问题的任何其他想法(停止在错误消息中显示完整的命名空间)?

我的问题是,我可以以某种方式重新抛出一个异常,指定一个不同的消息,就像4.5.1中的那个消息一样吗?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有