2016-08-18 78 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

相關問題