检查JValue是否为空

AVE*_*imi 5 c# json nullable json.net

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

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

错误是:

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

Jin*_*ter 7

从我的理解jToken["PurchasedValue"]是一个可以为空的价值.你必须使用

int PurchasedValue = (int)(jToken["PurchasedValue"]?? 0);
Run Code Online (Sandbox Code Playgroud)

nullableObj.Value 只有在有值时才可以使用而不会出错 nullableObj

否则你可以使用喜欢

int PurchasedValue = jToken["PurchasedValue"].HasValue?jToken["PurchasedValue"].Value: 0;
Run Code Online (Sandbox Code Playgroud)

这可能甚至不需要类型铸造


jos*_*ley 6

您可以比较令牌类型:

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