gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:00 24 4
gpt4 key购买 nike

我正在反序列化一个大型 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);
}
}

不幸的是,我没有办法将此转换器传递给 Deserialize 方法!找到的所有示例都使用允许指定转换器的“JsonConvert.DeserializeObject”方法。

我的问题 -

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

最佳答案

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

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com