c# - 如何手动触发 JsonSerialization 错误

标签 c# asp.net-core-mvc

我有一个应用程序,在启动时,我注册 NewtonSoft 并在序列化时记录错误。当我检查我的应用程序日志时,我可以看到有错误日志,但我无法定位或重新创建错误。
错误:Failed during serialization: MoveNextAction.Method.ReturnTypeCustomAttributes启动文件

.AddControllersAsServices().AddNewtonsoftJson(options =>
{
    options.UseMemberCasing();
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
    options.AllowInputFormatterExceptionMessages = true;
    options.SerializerSettings.Formatting = Formatting.None;
    options.SerializerSettings.ContractResolver = new DefaultContractResolver
    {
        NamingStrategy = null
    };
    options.SerializerSettings.Error = (sender, args) =>
    {
        _logger.LogError($"Failed during serialization: {args.ErrorContext.Path}", args.ErrorContext.Error);
        args.ErrorContext.Handled = true;
    };
})
我在我的应用程序中搜索了 系列
  • 几个类具有 [Serializable] 属性

  • 我也使用 DeserializeObject
    JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonValue); 
    
    我尝试将 jsonValue 设置为 null 但不幸的是没有触发 SerializerSettings.Error。
    任何有关生成 SerializerSettings 错误或调试的提示或建议将不胜感激。

    最佳答案

    您可以通过传递与 Controller 参数中指定的模型类相比无效的 JSON 请求正文来实现此目的。
    定义一个带有 int 字段的模型类,然后发送一个 HTTP 请求,其中该字段的 JSON 中有一个字符串值。
    这将作为默认值传递给 Controller ​​,在您的情况下,也应该执行错误处理程序。
    这是一个工作示例:

    public class HomeController : Controller
    {
        public class MyRequest
        {
            public int MyField { get; set; }
        }
    
        private readonly ILogger<HomeController> _logger;
    
        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }
    
        [HttpPost]
        public IActionResult Test([FromBody] MyRequest myRequest)
        {
            return Ok();
        }
    }
    
    如果您 POST 到/Home/Test 值
    {
        "MyField": "test"
    }
    
    那么你的错误处理程序将被调用,并且 args.ErrorContext.Path 的值将是 MyField虽然,args.ErrorContext.Error 的值将是 Message = "Could not convert string to integer: test. Path 'MyField', line 2, position 18."我想我需要对您的代码有更深入的了解才能准确重现错误,但我希望这会有所帮助。

    关于c# - 如何手动触发 JsonSerialization 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67839562/

    相关文章:

    asp.net-core - 如何在Startup.cs中获取当前域名

    asp.net-web-api - 在 ASP.NET 5 MVC 6 应用程序中使用 Web API

    c# - 具有异步套接字的C#游戏客户端

    c# - 在 ASP.NET Core 中实现 GraphQL(GraphQL for .Net),为什么我的查询是 :ObjectGraphType class not being registered by dependency injection?

    c# - WPF 事件 : BitmapImage PropertyChanged: "Calling Thread Cannot access"

    c# - Web 窗体项目中的小写 URL

    c# - 了解 Mvc 核心身份

    c# - 如何在缓存中存储数据?

    c# - 对于 LINQ Performance Gurus- 通过非泛型 ICollection 进行搜索

    c# - 锁语句的内存屏障