在调用 DeserializeObject( ... ) 时验证 JSON 数据<Object>



我想在我进行验证之后验证JSON代码。
例如,如果我有...

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

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

我知道我可以在之后添加 Validate() type函数 我很好奇,如果有一种与 JsonConvert.DeserializeObject<Car>(json)

同时进行的方法

可能是该作业的正确工具是序列化回调

只需创建一个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");
  }
}

用设定器将其插入。

public class Car
{
    private int _year;
    public int Year
    {
        get { return _year; }
        set
        {
            if (_year > 2017 || _year < 1900)
                throw new Exception("Illegal year");
            _year = value;
        }
    }
}

对于整个对象验证,只需在设置一个值时验证。

public class Car
{
    private int _year;
    private string _make;
    public string Make 
    {
        get { return _make; }
        set
        {
            _make = value;
            ValidateIfAllValuesSet();
        }
    }
    public int Year
    {
        get { return _year; }
        set
        {
            _year = value;
            ValidateIfAllValuesSet();
        }
    }
    private void ValidateIfAllValuesSet()
    {
        if (_year == default(int) || _make == default(string))
            return;
        if (_year > 2017 || _year < 1900)
            throw new Exception("Illegal year");
    }
}

相关内容

  • 没有找到相关文章

最新更新