2016-02-29 72 views
0

我正在寫一個簡單的類,序列化我IConfiguration接口,它具有以下方法無法序列化KeyValuePair與YamlDotNet

IEnumerable<KeyValuePair<string, object>> GetAllProperties(); 

在我的課堂我有一個方法

public void WriteConfiguration(IConfiguration data, Stream stream) 
    { 
     new Serializer().Serialize(new StreamWriter(stream), data.GetAllProperties()); 
    } 

Serializer不會寫入任何內容。某處,我讀了KeyValuePair不是序列化的,但這不是一樣了,現在(這是在.NET 2.0)

我第一次嘗試轉換IEnumerableList(使用.ToList()),但也沒什麼改變。然後我試圖創建一個類,而不是使用KeyValuePair

[Serializable] 
    private class Pair<TKey, TValue> 
    { 
     public Pair() { } 

     public Pair(TKey key, TValue value) 
     { 
      Key = key; 
      Value = value; 
     } 

     public TKey Key { get; set; } 
     public TValue Value { get; set; } 
    } 

但它仍然無法正常工作。

+0

似乎爲我工作......我懷疑這可能是因爲你從不處理StreamWriter,所以它永遠不會被刷新。 –

回答

0

這是因爲您不處置StreamWriter,所以它不會刷新到流中。嘗試把它在一個using塊:

public void WriteConfiguration(IConfiguration data, Stream stream) 
{ 
    using (var writer = new StreamWriter(stream)) 
    { 
     new Serializer().Serialize(writer, data.GetAllProperties()); 
    } 
} 

注:默認情況下,配置的StreamWriter也將關閉底層流。如果要保持打開狀態,請使用the StreamWriter constructor overload that takes a leaveOpen parameter,併爲此參數傳遞true。