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

时间:2016-08-18 10:54:20

标签: 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时为其注入一些“元数据”。为此,我写了一个自定义转换器,如下所示

 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'方法,该方法允许指定转换器。

我的问题 -

  • 如果我需要将一些额外的信息传递给被反序列化的对象的ctor,我的自定义转换器的方法是对吗?
  • 如何使反序列化使用我的自定义转换器和流?我无法将流序列化为字符串;这会导致 OutOfMemoryException

1 个答案:

答案 0 :(得分:4)

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

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

我不知道你是否 在这种情况下使用自定义转换器,但这就是你可以轻松完成的方式。