与json.net序列化:如何要求属性不为null



使用newtonsoft的json.net serializer,是否有可能要求属性包含非零值并在序列化上引发异常吗?类似:

public class Foo
{
    [JsonProperty("bar", SerializationRequired = SerializationRequired.DisallowNull)]
    public string Bar { get; set; }
}

我知道可以在避免化时(使用JsonPropertyRequired属性),但是我在此上找不到任何东西。

现在可以通过将JsonPropertyAttribute设置为 Required.Always

这需要Newtonsoft 12.0.1 ,在此问题中不存在。

下面的示例抛出了JsonSerializationException("必需属性"的值'期望一个值,但已无效。路径',第1行,位置16.):

void Main()
{
    string json = @"{'Value': null }";
    Demo res = JsonConvert.DeserializeObject<Demo>(json);
}
class Demo
{
    [JsonProperty(Required = Required.Always)]
    public string Value { get; set;}
}

遵循newtonsoft序列化错误处理文档后,您可以在oneRror()方法中处理null atribute。我不完全确定您会以nullvaluehandling参数的方式传递到serializeObject()。

public class Foo
{
     [JsonProperty]
     public string Bar 
     {
         get 
         {
             if(Bar == null)
             {
                 throw new Exception("Bar is null");
             }
             return Bar;
         }
         set { Bar = value;}
     [OnError]
     internal void OnError(StreamingContext context, ErrorContext errorContext)
     {
          // specify that the error has been handled
          errorContext.Handled = true;
          // handle here, throw an exception or ...
     }
}

int main()
{
     JsonConvert.SerializeObject(new Foo(), 
                        Newtonsoft.Json.Formatting.None, 
                        new JsonSerializerSettings { 
                            NullValueHandling = NullValueHandling.Ignore
                        });
}

相关内容

  • 没有找到相关文章

最新更新