Я использую компонент Json.Net Newtonsoft во всем моем проекте на работе.Newtonsoft Json.Net - Как избежать использования свойств Json?
Время от времени я спотыкаюсь о деталях реализации библиотеки. Например, когда я извлекаю значение JProperty, я вынужден использовать свойство .Value:
var displaySettings = options.DisplaySettings.Value;
Это раздражает, так как нужно помнить, что свойства данного динамического объекта могут быть действительно получены с помощью свойства «Значение», не зная его тип во время выполнения. (И, кроме того, есть еще один код linq для выбора «Значение», которое загромождает код)
Есть ли способ легко обернуть объект Json или, возможно, использовать компонент Newtonsoft более правильным образом?
Я вижу, что у меня проголосовали, но я думаю, что существует проблема с инкапсуляцией JObject.
Если я использую «var» для хранения переменной bool, тест завершится неудачно, потому что переменная будет содержать объект JValue.
[Test]
public void TestProperties()
{
dynamic testee = JsonConvert.DeserializeObject(@"
{
TestBool:true
}
");
var result = testee.TestBool;
Assert.That(result, Is.EqualTo(true));
}
Этот тест будет проходить:
Assert.That(result.Value, Is.EqualTo(true));
Испытание приведет:
Ожидаемое: Истинную Но было:
Кроме того, чтобы доказать, что это не NUnit выпуск:
dynamic testee = JsonConvert.DeserializeObject(@"
{
TestBool:true
}
");
var result = testee.TestBool;
if (result)
{
Assert.Pass();
return;
}
Вышеизложенное исключает исключение из предложения «if».
Интересно, является ли обычная практика для stackoverflow, чтобы проголосовать за людей, не прося разъяснений. Хорошая культура. (Я могу взять, что некоторые из новых людей к данной технологии будет обескуражены задавать вопросы на всех)
Спасибо, AD
Вы можете задать строго типизированные классы и десериализации в те вместо того, чтобы использовать динамический. –