c# - 调用 DeserializeObject<Object>( ... ) 时验证 Json 数据

标签 c# json json.net

我想在反序列化后验证 Json 代码。
例如,如果我有...

using Newtonsoft.Json;
...
public Car
{
  public int Year{ get; set; }
  public String Make{ get; set; }
}
...
JsonConvert.DeserializeObject<Car>(json)

我想验证年份是 < 2017 && >=1900 ,(例如)。
或者也许确保 Make 是一个非空字符串(或者它是一个可接受的值)。

我知道我可以添加 Validate()在反序列化之后键入函数,但我很好奇是否有一种方法可以与 JsonConvert.DeserializeObject<Car>(json) 同时执行此操作

最佳答案

可能最适合这项工作的工具是 serialization callback

只需创建一个 Validate 方法并为其添加一个 [OnDeserialized] 属性即可:

public Car
{
  public int Year{ get; set; }
  public String Make{ get; set; }

  [OnDeserialized]
  internal void OnDeserializedMethod(StreamingContext context)
  {
    if (Year > 2017 || Year < 1900)
      throw new InvalidOperationException("...or something else");
  }
}

关于c# - 调用 DeserializeObject<Object>( ... ) 时验证 Json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42283858/

相关文章:

c# - JSON.NET 阅读器问题

c# - Json反序列化失败

C# - 如何使用 lambda 在 Entity Framework 中执行简单查询?

用于 JSOUP Android 的 PHP JSON 数组编码

c# - 在带有第一个参数预设的方法中传递操作

android - 如何使用 JSonobject.getInt 函数处理空值?

java - 如何从 JSON 创建具有不同字段结构的 Java obj

.Net Linq 到 JSON 与 Newtonsoft JSON 库

c# - 在C#中单击鼠标获取鼠标坐标

c# - 将 LambdaExpression 转换为带装箱返回值的类型化 Expression<Func<T, object>>