c# – Json.NET中来自JToken的隐式转换

使用Json.NET,我看到本机类型到JToken的所有转换都是隐式的,但JToken的转换是显式的.

我的动机是避免if语句,方法调用等中的显式强制转换.例如,如果最后的if没有抛出它会很好:

string dummyJson = @"{'ShouldDoStuff': true}";
dynamic parsed = JValue.Parse(dummyJson);

// Works:
bool explicitShouldDoStuff = parsed.ShouldDoStuff; 

// Also works:
if ((bool)parsed.ShouldDoStuff)
    Console.WriteLine("Hooray, there's a rosebush?");

// Throws RuntimeBinderException: Cannot implicitly convert type 'Newtonsoft.Json.Linq.JValue' to 'bool'
if (parsed.ShouldDoStuff)   
    Console.WriteLine("Die you gravy-sucking pigs");

有没有办法将JToken转换为本机类型?

最佳答案
显式运算符的原因是隐式运算符会导致各种问题.所以,不,你不能这样做,它是设计的.

但是,除了显式强制转换,您还可以获取Value属性:

if (parsed.ShouldDoStuff.Value)
    Console.WriteLine("Die you gravy-sucking pigs");

我认为这比打字更干净.

转载注明原文:c# – Json.NET中来自JToken的隐式转换 - 代码日志