反序列化并在 required 属性 为 null 时抛出异常
Deserialization and throw exception for required property when it is null
我可能漏掉了什么。
我想测试当 API 调用响应 returns 为 null 的 属性 时的行为,我想在发生这种情况时抛出异常。
我有一个 Form
对象如下
public class Form
{
[Required]
public string Html { get; set; }
public string Json { get; set; }
public string Name { get; set; }
}
我已经初始化了一个对象
var myData = new
{
Json = "foo",
};
string jsonData = JsonConvert.SerializeObject(myData);
var response = JsonConvert.DeserializeObject<Form>(File.ReadAllText(jsonPath));
我原以为会出现异常,因为 Html
属性 是 required
而不是 nullable
,
但实际上将对象获取为
{
Html = null,
Json = foo,
Name = null
}
我曾尝试按如下方式使用 JsonSerializerSettings
,但这实际上仅在存在额外的不需要的 属性 时才会抛出异常,而在缺少
时不会抛出异常。
JsonSerializerSettings config = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Error, NullValueHandling = NullValueHandling.Include};
var res = JsonConvert.DeserializeObject<Form>(json,config);
你需要[JsonProperty(Required = Required.Always)]
.
public class Form
{
[JsonProperty(Required = Required.Always)]
public string Html { get; set; }
public string Json { get; set; }
public string Name { get; set; }
}
而 [Required]
属性用于 Data Annotation。
参考
我可能漏掉了什么。 我想测试当 API 调用响应 returns 为 null 的 属性 时的行为,我想在发生这种情况时抛出异常。
我有一个 Form
对象如下
public class Form
{
[Required]
public string Html { get; set; }
public string Json { get; set; }
public string Name { get; set; }
}
我已经初始化了一个对象
var myData = new
{
Json = "foo",
};
string jsonData = JsonConvert.SerializeObject(myData);
var response = JsonConvert.DeserializeObject<Form>(File.ReadAllText(jsonPath));
我原以为会出现异常,因为 Html
属性 是 required
而不是 nullable
,
但实际上将对象获取为
{
Html = null,
Json = foo,
Name = null
}
我曾尝试按如下方式使用 JsonSerializerSettings
,但这实际上仅在存在额外的不需要的 属性 时才会抛出异常,而在缺少
JsonSerializerSettings config = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Error, NullValueHandling = NullValueHandling.Include};
var res = JsonConvert.DeserializeObject<Form>(json,config);
你需要[JsonProperty(Required = Required.Always)]
.
public class Form
{
[JsonProperty(Required = Required.Always)]
public string Html { get; set; }
public string Json { get; set; }
public string Name { get; set; }
}
而 [Required]
属性用于 Data Annotation。
参考