gpt4 book ai didi

c# - 如何从 JToken 填充现有对象(使用 Newtonsoft.Json)?

转载 作者:太空狗 更新时间:2023-10-29 17:43:11 25 4
gpt4 key购买 nike

根据 http://www.newtonsoft.com/json/help/html/PopulateObject.htm您可以通过 JSON 字符串中定义的值更新现有实例。我的问题是我必须填充对象的数据已经被解析为 JToken 对象。我目前的方法看起来像这样:

Private Sub updateTarget(value As JToken, target as DemoClass)
Dim json As String = value.ToString(Formatting.None)
JsonConvert.PopulateObject(json, target)
End Sub

是否有更好的方法来完成此操作而不必“还原”最初创建 JToken 时已经完成的解析?

最佳答案

使用JToken.CreateReader()并将读者传递给JsonSerializer.Populate .返回的读者是 JTokenReader它遍历预先存在的 JToken 层次结构,而不是序列化为字符串并进行解析。

由于您将问题标记为 c#,这里有一个 c# 扩展方法可以完成这项工作:

public static class JsonExtensions
{
public static void Populate<T>(this JToken value, T target) where T : class
{
using (var sr = value.CreateReader())
{
JsonSerializer.CreateDefault().Populate(sr, target); // Uses the system default JsonSerializerSettings
}
}
}

VB.NET 中的等价物:

Public Module JsonExtensions

<System.Runtime.CompilerServices.Extension>
Public Sub Populate(Of T As Class)(value As JToken, target As T)
Using sr = value.CreateReader()
' Uses the system default JsonSerializerSettings
JsonSerializer.CreateDefault().Populate(sr, target)
End Using
End Sub

End Module

关于c# - 如何从 JToken 填充现有对象(使用 Newtonsoft.Json)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220328/

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