使用Newtonsoft的Json.NET序列化程序,是否可以要求属性包含非null值并在序列化时抛出异常(如果不是这种情况)?类似的东西:
public class Foo
{
[JsonProperty("bar", SerializationRequired = SerializationRequired.DisallowNull)]
public string Bar { get; set; }
}
我知道可以在反序列化时使用Required
的{{1}}属性来执行此操作,但我找不到任何关于序列化的内容。
答案 0 :(得分:1)
现在可以通过将 JsonPropertyAttribute
设置为 Required.Always
来实现。
这需要 Newtonsoft 12.0.1+,在提出此问题时尚不存在。
下面的示例抛出一个 JsonSerializationException
(“必需的属性 'Value' 需要一个值,但结果为空。路径 '',第 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;}
}
答案 1 :(得分:0)
在Newtonsoft serialization error handling documentation之后,您可以在OnError()方法中处理null属性。我不完全确定你将作为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
});
}