检查JValue是否为null。

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

它是 Newtonsoft JSON.NET 的一部分。 - AVEbrahimi
3个回答

10

据我所知,jToken["PurchasedValue"] 是一个可为空的值。你必须使用它。

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

nullableObj.Value 只能在 nullableObj 有值时使用,否则您可以像这样使用:

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

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


PurchasedValue = (int)(jToken["PurchasedValue"].Type!=JTokenType.Null ? jToken["PurchasedValue"].Value<int>(): 0); - AVEbrahimi

8
你可以比较令牌类型:
var purchasedValueToken = jToken["PurchasedValue"];
int purchasedValue = purchasedValueToken.Type == JTokenType.Null ? 0 : purchasedValueToken.Value<int>();

3

好的,这里有几件事情:

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

您可以根据以下方式更改代码:

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

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