Newtonsoft.Json反序列化空字符串

14

假设我有一个长这样的对象:

public class MyObject
{
    [JsonProperty(Required = Required.Always)]
    public string Prop1 { get; set; }

    [JsonProperty(Required = Required.Always)]
    public string Prop2 { get; set; }
}

现在,如果我尝试使用 JsonConvert 反序列化一个字符串,当其中任一属性缺失时会抛出异常。但是,如果我像这样传递一个空字符串:

JsonConvert.DeserializeObject<MyObject>("")

返回null但没有抛出异常。我如何配置MyObject或序列化程序,以便像任何所需属性丢失时一样抛出JsonException

2个回答

7

只需要检查是否为空值即可。由于空字符串中未定义对象,这是一种预期行为 :)

var obj = JsonConvert.DeserializeObject<MyObject>("");
if (obj == null)
{
    throw new Exception();
}

1

你需要像这样装饰你的类:

[JsonObject(ItemRequired = Required.Always)]
public class MyObject
{
}

1
我已经尝试过这个,但是JsonConvert.DeserializeObject只返回null,没有抛出任何异常。 - Christian Andersson
奇怪,它应该可以工作。即使在方法 Required 的描述中也说:属性必须在 JSON 中定义且不能为空。 - Radenko Zec
我看到JsonObjectAttribute.ItemRequired的描述是“一个值,表示对象的属性是否必需”。因此,它似乎与对象本身无关。这看起来是一个方便的功能,可以一次性针对类的所有属性进行操作,而不必在每个单独的属性上放置[JsonProperty(Required = Required.Always)] - MarredCheese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接