使用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");

我觉得比铅字更干净。

10-08 00:15