【发布时间】:2016-12-14 20:10:03
【问题描述】:
我在整个工作项目中都使用 Json.Net Newtonsoft 组件。
我有时会偶然发现该库的实现细节。例如,当我获取 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”子句上抛出异常。
我想知道在 stackoverflow 上是否有一种常见的做法,即在不要求澄清的情况下对人们投反对票。不错的文化。 (我可以接受,一些刚接触给定技术的人根本不鼓励提问)
谢谢, 广告
【问题讨论】:
-
您可以定义强类型类并反序列化为那些而不是使用动态类。