c# - 从 Json.NET 中的 JToken 隐式转换

标签 c# type-conversion json.net

使用 Json.NET ,我看到 native 类型 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 到 native 类型的转换也隐式进行?

最佳答案

使用显式运算符的原因是隐式运算符会导致各种问题。所以,不,你不能这样做,这是设计使然。

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

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

我认为它比类型转换更干净。

关于c# - 从 Json.NET 中的 JToken 隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21401869/

相关文章:

枚举的 c# 替代方案以获得智能感知优势

java - 如何在运行时知道 ResultSet 列类型兼容的 java 类型?

ios - 核心数据。获取最大为 "dateTime"的实体,它被写为字符串?

.net - Newtonsoft.Json.DeserializeObject 抛出什么异常?

ASP.NET Web API : JSON Serializing Circular References

c# - 从 C# 运行 PowerShell 脚本以 pull Git 存储库

c# - 将控件添加到 Office (VSTO) 中的现有功能区组

sql - 将日期名称转换为其整数表示形式

c# - 如果解析不好,则解析 JSON 语法

c# - 代码契约(Contract)的好处