无法使用YamlDotNet序列化KeyValuePair

时间:2016-02-29 19:27:00

标签: c# serialization yamldotnet

我正在写一个简单的类来序列化我的IConfiguration接口,该接口具有以下方法

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中)

我尝试首先将IEnumerable转换为List(使用.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; }
    }

但它仍然无效。

1 个答案:

答案 0 :(得分: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。