尝试将此使用自定义 JsonConverter 的 .NET JsonConvert.Deserialize 方法转换为 JsonSerialize.Deserialize
Trying to convert this .NET JsonConvert.Deserialize method that is using a custom JsonConverter to a JsonSerialize.Deserialize
我正在尝试反序列化一个大型 json 文件。因此,我希望将文件内容流式传输到 Deserialize
方法以减少 allocations/GC 的数量,等等
我当前的反序列化方法使用自定义 JsonConverter
(效果很好)。我不确定如何执行相同的代码,但是使用带有自定义 JsonConverter
.
的 JsonSerlialize
实例的流式传输方法
当前代码:
JsonConvert.DeserializeObject<IList<T>>(content, new[] { jsonConverter });
新代码(不完整):
using (var streamReader = new StreamReader(fileName))
{
using (var jsonReader = new JsonTextReader(streamReader))
{
var serializer = new JsonSerializer();
return jsonConverter == serializer.Deserialize<IList<T>>(jsonReader);
}
}
我的新代码没有包含任何 CustomConverter 实例。请问我该怎么做?
您可以尝试使用 JsonSerializer 的 static Create
function with settings 来传递您的转换器。
using (var streamReader = new StreamReader(fileName))
{
using (var jsonReader = new JsonTextReader(streamReader))
{
var serializer = JsonSerializer.Create(new JsonSerializerSettings() { Converters = new List<JsonConverter> { jsonConverter }});
return jsonConverter == serializer.Deserialize<IList<T>>(jsonReader);
}
}
我正在尝试反序列化一个大型 json 文件。因此,我希望将文件内容流式传输到 Deserialize
方法以减少 allocations/GC 的数量,等等
我当前的反序列化方法使用自定义 JsonConverter
(效果很好)。我不确定如何执行相同的代码,但是使用带有自定义 JsonConverter
.
JsonSerlialize
实例的流式传输方法
当前代码:
JsonConvert.DeserializeObject<IList<T>>(content, new[] { jsonConverter });
新代码(不完整):
using (var streamReader = new StreamReader(fileName))
{
using (var jsonReader = new JsonTextReader(streamReader))
{
var serializer = new JsonSerializer();
return jsonConverter == serializer.Deserialize<IList<T>>(jsonReader);
}
}
我的新代码没有包含任何 CustomConverter 实例。请问我该怎么做?
您可以尝试使用 JsonSerializer 的 static Create
function with settings 来传递您的转换器。
using (var streamReader = new StreamReader(fileName))
{
using (var jsonReader = new JsonTextReader(streamReader))
{
var serializer = JsonSerializer.Create(new JsonSerializerSettings() { Converters = new List<JsonConverter> { jsonConverter }});
return jsonConverter == serializer.Deserialize<IList<T>>(jsonReader);
}
}