无法使用 YamlDotNet 序列化 KeyValuePair

Unable to serialize a KeyValuePair with YamlDotNet

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

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

在我的 class 我有一个方法

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

但是 Serializer 不会向流中写入任何内容。我在某处读到 KeyValuePair 不可序列化,但现在不再是这种情况(它在 .NET 2.0 中)

我首先尝试将 IEnumerable 转换为 List(使用 .ToList()),但没有任何改变。然后我尝试创建一个 class 来代替 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; }
    }

但是还是不行

这是因为您没有处理 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。