有幾種方法可以解決這個問題;兩者都非常相似。
選項1
既然你已經知道了你的動態對象實際上是一個JObject
,你可以將它轉換(或只是消除動態變量完全,直接從一開始就反序列化JSON的JObject
)。從那裏,您可以使用相同的語法嘗試獲取屬性值(a JToken
)。如果該屬性不存在,則結果將爲空。否則,你可以檢查令牌的Type
屬性,以確定是否是JTokenType.Null
或一些其它記號類型:
JObject jo = (JObject)dynamicObject;
JToken token = jo["propertyName"];
if (token == null)
{
Console.WriteLine("property does not exist.");
}
else if (token.Type == JTokenType.Null)
{
Console.WriteLine("property exists with a value of null.");
}
else
{
Console.WriteLine("property exists with with a value of \"" + token.ToString() + "\".");
}
小提琴:https://dotnetfiddle.net/3Nrwns
選項2
如果你喜歡一起工作動態對象,那麼您需要使用object.ReferenceEquals
來確定屬性是否存在。如果確實如此,那麼你可以使用常規的空檢查,找出值是否爲空:
dynamic val = dynamicObject["propertyName"];
if (object.ReferenceEquals(val, null))
{
Console.WriteLine("property does not exist.");
}
else if (val == null)
{
Console.WriteLine("property exists with a value of null.");
}
else
{
Console.WriteLine("property exists with with a value of \"" + val.ToString() + "\".");
}
小提琴:https://dotnetfiddle.net/4Mmbak