c# - 使用自定义转换器从流中反序列化 Json

标签 c# json.net deserialization json-deserialization

我正在反序列化一个大型 JSON 片段,该片段是我从对 REST 端点的请求中作为响应正文获得的。

我使用下面的代码

var serializer = new JsonSerializer();
var sr = new StreamReader(responseStream))
var jsonTextReader = new JsonTextReader(sr))
{
    return serializer.Deserialize<ResultItem>(jsonTextReader);
}

我需要在构造每个 ResultItem 时为其注入(inject)一些“元数据”。为了实现这一点,我编写了一个自定义转换器,如下所示

 public class ResultItemConverter : CustomCreationConverter<ResultItem>
{
    private Metadata typeMetadata;

    public ResultItemConverter(Metadata typeMetadata)
    {
        this.typeMetadata = typeMetadata;
    }

    public override ResultItem Create(Type objectType)
    {
        return new ResultItem(this.typeMetadata);
    }
}

不幸的是,我看不出有什么办法可以将此转换器传递给反序列化方法!找到的所有示例都使用“JsonConvert.DeserializeObject”方法,该方法允许指定转换器。

我的问题 -

  • 如果我需要将一些附加信息传递给正在反序列化的对象的构造函数,我的自定义转换器方法是否正确?
  • 如何使用我的自定义转换器和流进行反序列化?我无法将流序列化为字符串;这会导致 OutOfMemoryException

最佳答案

您需要自定义序列化器本身。例如:

serializer.Converters.Add(new ResultItemConverter());

我不知道在这种情况下您是否必须使用自定义转换器,但这就是您可以轻松做到的方法。

关于c# - 使用自定义转换器从流中反序列化 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39016387/

相关文章:

c# - 如何将参数传递给反序列化json的构造函数

c# - 向Mysql插入数据越来越慢

c# - 遍历每个枚举值需要并行化

javascript - 从 URL 中检索查询字符串

c# - Json.Net SelectToken 查询不起作用

c# - HttpClient.DeleteAsync 和 Content.ReadAdStringAsync 总是返回 null

c# - json.net 使用 CamelCasePropertyNamesContractResolver 错误地转换 TimeZoneInfo

java - 使用 SimpleFramework 反序列化多个不同的标签(具有相同的名称)

c# - C# Monitor.Wait() 是否遭受虚假唤醒?

java - 如何在放心中处理查询参数值中的特殊字符