使用newtonsoft的json.net serializer,是否有可能要求属性包含非零值并在序列化上引发异常吗?类似:
public class Foo
{
[JsonProperty("bar", SerializationRequired = SerializationRequired.DisallowNull)]
public string Bar { get; set; }
}
我知道可以在避免化时(使用JsonProperty
的Required
属性),但是我在此上找不到任何东西。
现在可以通过将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
});
}