检查 JValue 是否为空

Checking if JValue is null

为什么这段代码没有 运行,我想检查 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) 

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

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

nullableObj.Value 只有在 nullableObj

有值时才能正确使用

否则你可以使用like

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

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

嗯,这里有几件事:

jToken["PurchasedValue"] 可以 return 任何东西,所以最好进行类型检查。

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

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

您可以比较令牌类型:

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