我在工作中使用了Json.Net Newtonsoft组件。Newtonsoft Json.Net - 如何避免使用Json属性?
有时我偶然发现图书馆的实施细节。例如,当我获取JProperty的值时,我不得不使用.Value属性:
var displaySettings = options.DisplaySettings.Value;
这很烦人,因为人们必须记住,给定的动态对象的属性可以通过“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”子句的例外。
我不知道这是否是一种常见的做法,用于在不需要澄清的情况下对人进行降级投票。好的文化。 (我可以拿,有些新的给定技术的人就会失去所有提问)
感谢,AD
您可以定义强类型类和反序列化到这些,而不是使用动态处理动态值。 –