【问题标题】:Validating JSON before it gets deserialized in asp.net web api在 asp.net web api 中反序列化之前验证 JSON
【发布时间】:2015-09-24 18:49:59
【问题描述】:

我想在它被反序列化为我的对象之前验证 json 输入

例子:

{"ID": ["1234"]},有效 = 并被反序列化为我的 POCO 类

{"ID": ["1234",不是一个有效的 JSON,我想抛出一个错误

我想抛出一个错误,但现在 Web API 可以优雅地处理它并反序列化到适当的类。无论如何我可以在输入 json 到达我的控制器之前拦截转换并验证它吗?

【问题讨论】:

  • 我假设您的 API 没有被命中并且您怀疑 JSON 的格式不正确?
  • 没有我的 API 被击中,并且输入被反序列化,但我期望一个错误而不是因为它不应该反序列化没有正确格式化的 JSON,就像最后没有括号
  • 这很有趣,因为我希望反序列化 {ID:["1234"] 会抛出异常,因为它格式错误。此外,{ID:["1234"]} 也不是有效的 json...您使用的是什么序列化库? JSON.NET?
  • 感谢您指出这一点,刚刚编辑过。
  • 您是否尝试过使用 ModelState.IsValid 检查是否失败?

标签: c# json asp.net-web-api2


【解决方案1】:

我在控制器方法的开头简单检查:

if (!Model.IsValid(ModelName))
{
    //handle error
}
else
{
    //continue 
}

【讨论】:

  • 谢谢,显然 Model.IsValid 和解串器不匹配。如果输入格式不正确,我希望输入不会被反序列化,但我现在得到了答案。
  • 是的,我认为无论 JSON 是否正确反序列化,模型对象都会被实例化为“null”。
【解决方案2】:

了解您的文本是否为有效 JSON 的唯一方法是尝试解析它。如果解析器抛出异常,则它不是有效的 JSON。见How to make sure that string is Valid JSON using JSON.NET)。

如果您使用的是 NewtonSoft 的 Json.Net,您可以根据架构验证您的 JSON,这样您就知道自己拥有了

  • 有效的 JSON,即
  • 采用您期望的格式

了解详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2021-07-15
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多