检查JValue是否为空

时间:2017-04-27 11:44:38

标签: c# json json.net nullable

为什么这段代码没有运行,我想检查JSON是否包含密钥PurchasedValue的整数? ():

public PropertyInfo(Newtonsoft.Json.Linq.JToken jToken)
{
    this.jToken = jToken;
    int PurchasedValue = (int)(jToken["PurchasedValue"].Value ?? 0);
}

错误是:

Error CS0019: Operator `??' cannot be applied to operands of type `method group' and `int' (CS0019) 

3 个答案:

答案 0 :(得分:7)

根据我的理解,jToken["PurchasedValue"]是一个可以为空的值。 你必须使用

int PurchasedValue = (int)(jToken["PurchasedValue"]?? 0);

nullableObj.Value只有在nullableObj

的值存在时才能正常使用

否则您可以使用

int PurchasedValue = jToken["PurchasedValue"].HasValue?jToken["PurchasedValue"].Value: 0;

这可能甚至不需要类型转换

答案 1 :(得分:3)

嗯,这里有几件事情:

jToken [" PurchasedValue"]可以返回任何内容,因此最好进行类型检查。

您可以按以下方式更改代码:

public PropertyInfo(Newtonsoft.Json.Linq.JToken jToken)
{
    this.jToken = jToken;
    int PurchasedValue = jToken["PurchasedValue"] is int ? jToken["PurchasedValue"] : 0;
}

答案 2 :(得分:2)

您可以比较令牌类型:

var purchasedValueToken = jToken["PurchasedValue"];
int purchasedValue = purchasedValueToken.Type == JTokenType.Null ? 0 : purchasedValueToken.Value<int>();