gpt4 book ai didi

c# - JToken.ToObject() 与 JToken.Value() 之间的区别

转载 作者:行者123 更新时间:2023-11-30 22:52:23 31 4
gpt4 key购买 nike

JToken.ToObject<T>() 之间有什么区别?方法和 JToken.Value<T>()扩展方法(没有 key 参数的方法)?

var jToken = JToken.Parse("123");
var toObjectStrResult = jToken.ToObject<string>();
var valueStrResult = jToken.Value<string>();
// toObjectStrResult == valueStrResult == "123"

var toObjectLongResult = jToken.ToObject<long>();
var valueLongResult = jToken.Value<long>();
// toObjectLongResult == valueLongResult == 123L

最佳答案

区别如下:

  1. ToObject<T>() 是一个反序列化操作。它构建了一个 JsonSerializer 并用它来反序列化当前的 JToken到所需的类型。因此, token 可以是任何东西(JSON 数组、JSON 对象或 JSON 原始值),序列化程序将使用反射,通过使用 JTokenReader 读取其内容,尝试将 token 反序列化为所需的类型。 .

    在编写输入标记和输出类型可以是任何类型的通用代码时,此方法很有用。这是从 JToken 创建 C# 对象的最通用和最安全的方法。 .

  2. Extensions.Value<U>(IEnumerable<JToken>) 是一个转换/转换操作。它尝试通过调用 Convert.ChangeType() 将当前标记的 转换为目标类型。 (以及处理一些特殊情况)。

    当您知道自己的 JToken 时,此方法很有用。实际上是一个 JValue 你想转换它的 Value 到特定的、必需的 .Net 原始类型。例如,如果 JValue可能包含 long或数字字符串,您可以将其转换为 int , 一个 decimaldouble .如果它可能包含 DateTimeISO 8601 中的字符串格式,您可以将其转换为 DateTime .并且任何原始 JSON 值始终可以转换为字符串。

    虽然此方法不如 ToObject<T>() 通用它在转换原始值时会更高效,因为序列化程序在反序列化原始值时会在内部调用相同的转换方法。

关于c# - JToken.ToObject<T>() 与 JToken.Value<T>() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58188277/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com