使用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");
我觉得比铅字更干净。