如何从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
。 返回的读者是一个JTokenReader
,它遍历预先存在的JToken
层次结构,而不是序列化为字符串并进行解析。
由于您标记了问题c#
,这是执行该作业的c#
扩展方法:
public static class JsonExtensions { public static void Populate(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 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