2016-08-18 66 views
0

我正在反序列化一个大的JSON片段,作为响应正文从请求到REST端点。使用自定义转换器从流中反序列化Json

我使用下面

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

我的问题 -

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

回答

3

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

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

我不知道你是否有这种情况下,使用自定义转换器,但是这是你怎么能那么容易做到。

+0

jeez ...完全忽略了“转换器”属性是一个集合的事实!看到了吸气剂,没有再看! – alwayslearning

相关问题