2016-02-29 71 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。