我在工作中使用了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
您可以定義強類型類和反序列化到這些,而不是使用動態處理動態值。 –