反序列化时如何检查JSON字符串中是否存在属性

时间:2019-03-07 18:48:55

标签: c# json binding deserialization

我有这段反序列化JSON字符串的代码。
现在我们可以看到JSON字符串具有以下属性:((请注意,CORS属性存在于“ has”属性下,因此我们需要检查“ has”是否也存在)

CORS

我的问题是。有时确实会发生JSON字符串中缺少此属性的情况。如图所示,我在try / catch块中使用以下代码。因为如果缺少CORS属性,我会收到一个异常,但是异常的性能非常昂贵,现在我对30个属性使用try / catch块。

然后我想知道如何才能通过代码检查CORS属性是否首先存在?当CORS不存在时,在没有try / catch的情况下,下面的代码行给出此错误:

无法对空引用执行运行时绑定

master

JSON字符串:

String corsvalue = "";
try { corsvalue = deserializedTicker.has.CORS.ToLower(); } catch { }

完整代码:

{ 
  "id": "hello", 
  "name": "Hello",
  "has": { 
    "CORS": false,
    "CORS2": true
  },
  "has2": { 
    "CORS3": false,
    "CORS4": true
  }
}

1 个答案:

答案 0 :(得分:1)

您在这里:

String JSONstring = "{ \"id\": \"hello\", \"name\": \"Hello\", \"has\": { \"CORS\": false, \"CORS2\": true }, \"has2\": { \"CORS3\": false, \"CORS4\": true }}";

            JObject jobject = JObject.Parse(JSONstring);

            JToken cors = jobject.SelectToken("has.CORS");
            if (cors != null)
            {
                JsonInfo myEvent = jobject.ToObject<JsonInfo>();
            }