Поэтому я пишу оболочку для JsonNode, чтобы упростить извлечение свойств json, когда нет контракта данных и мне нужно поддерживать множество различных значений. Но у меня возникают некоторые проблемы, когда дело доходит до чтения пустого значения. Так что либо я делаю что-то не так, либо JsonNode — не тот класс, с которым здесь можно работать.
Мой test-json следующий:
{
"id": 3,
"name": null
}
И я делаю разные запросы к JsonNode.
_node.HasProperty("id")
вернет true, но
_node.HasProperty("name")
вернет ложь.
Так есть ли способ добиться этого?
Пожалуйста, посоветуйте.
Пожалуйста. предоставьте больше кода вместе с данными для ясности.
@hakim00 - Ты был прав насчет денег, друг мой. Самый простой способ — использовать _node.AsObject()
для получения экземпляра JsonObject, а затем использовать ContainsKey()
, как вы сказали. Пожалуйста, добавьте ответ здесь, и я отмечу его как правильный ответ.
Что такое метод HasProperty? Откуда это взялось? Я не могу найти его ни с помощью методов ни JsonNode, ни JsonObject. Вам необходимо проверить свой код на наличие определения HasProperty.
@Thomas Я добавил ответ, но мне также интересна реализация HasProperty
, так как это было предложено здесь github.com/dotnet/runtime/issues/47649#issuecomment-812123225, но так и не реализовано.
О да... Теперь я понял, что кто-то добавил метод расширения к объекту под названием HasProperty... Так что неудивительно, что это никогда не работало :)
По моему мнению, полученный результат означает, что на данный момент обработано только JsonNode
. Вам нужно вернуться в корень текущего "id": 3
и получить узел «имя».
Вам нужно будет привести JsonNode
к производному типу JsonObject
и использовать метод ContainsKey
.
JsonObject jsObj = _node.AsObject();
bool hasProperty = jsObj.ContainsKey("name");
Спасибо за указание. Вы правы, я имел в виду кастинг.
Я думаю, вам придется разобрать его на
JsonObject
и использоватьContainsKey("name")