Как проверить, существует ли свойство в строке JSON при десериализации - PullRequest
0 голосов
/ 07 марта 2019

У меня есть этот код, который десериализует строку JSON.
Теперь мы можем видеть, что строка JSON имеет, например, это свойство: (Обратите внимание, что свойство CORS существует в свойстве has, поэтому нам нужно проверить, существует ли также has, прежде чем я верю)

CORS

Мой вопрос Иногда случается, что это свойство может отсутствовать в строке JSON. Как видно, я использую код ниже, где я использую блок try / catch. Потому что, если свойство CORS отсутствует, я получаю исключение, но исключения очень дороги по производительности, и теперь я использую блок try / catch для 30 свойств.

Тогда мне интересно, как мы можем проверить с помощью кода, существует ли свойство CORS первым? Ниже строки кода БЕЗ try / catch выдает эту ошибку, когда CORS не существует:

Невозможно выполнить привязку во время выполнения для нулевой ссылки

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

Строка JSON:

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

Полный код:

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

var deserializedTicker = JsonConvert.DeserializeObject<JsonInfo>(JSONstring);

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


public class JsonInfo 
{
  public string id { get; set; }
  public string name { get; set; }
  public JsonHasInfo has { get; set; }
  public JsonHas2Info has2 { get; set; }
}

public class JsonHasInfo
{
  public bool CORS { get; set; }
  public bool CORS2 { get; set; }
}

public class JsonHas2Info
{
  public bool CORS3 { get; set; }
  public bool CORS4 { get; set; }
}

1 Ответ

1 голос
/ 07 марта 2019

Вот, пожалуйста:

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>();
            }
...