C# 无法使用YamlDotNet序列化KeyValuePair

C# 无法使用YamlDotNet序列化KeyValuePair,c#,serialization,yamldotnet,C#,Serialization,Yamldotnet,我正在编写一个简单的类来序列化我的IConfiguration接口,该接口具有以下方法 IEnumerable<KeyValuePair<string, object>> GetAllProperties(); 但是序列化程序不向流写入任何内容。我在某个地方读到,KeyValuePair不可序列化,但现在不再是这样了(在.NET2.0中) 我首先尝试将IEnumerable转换为列表(使用.ToList()),但没有任何更改。然后我尝试创建一个类来代替KeyValueP

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

IEnumerable<KeyValuePair<string, object>> GetAllProperties();
但是
序列化程序不向流写入任何内容。我在某个地方读到,
KeyValuePair
不可序列化,但现在不再是这样了(在.NET2.0中)

我首先尝试将
IEnumerable
转换为
列表
(使用
.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; }
    }
[可序列化]
私有类对
{
公共对(){}
公共对(TKey、TValue)
{
钥匙=钥匙;
价值=价值;
}
公钥{get;set;}
公共TValue值{get;set;}
}

但它仍然不起作用。

这是因为您没有处理
StreamWriter
,因此它不会被刷新到流中。尝试使用
块将其放入

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

注意:默认情况下,处理
StreamWriter
也将关闭底层流。如果要保持打开状态,请使用此参数并将其传递为true。

似乎对我有用。。。我怀疑这可能是因为你从未处理过StreamWriter,所以它从未刷新过。
public void WriteConfiguration(IConfiguration data, Stream stream)
{
     using (var writer = new StreamWriter(stream))
     {
         new Serializer().Serialize(writer, data.GetAllProperties());
     }
}