Use JToken.CreateReader()
and pass the reader to JsonSerializer.Populate
. The reader returned is a JTokenReader
which iterates through the pre-existing JToken
hierarchy instead of serializing to a string and parsing.
Since you tagged your question c#
, here's a c#
extension method that does the job:
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
}
}
}
And the equivalent in 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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…