Как я могу заполнить существующий объект из 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 в первом место?
1 ответов
использовать 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