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

根据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。返回的阅读器是a

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

以上是 如何从JToken填充现有对象(使用Newtonsoft.Json)? 的全部内容, 来源链接: utcz.com/qa/403819.html

回到顶部