0

我正在编写一个简单的类来序列化我的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 中)

我首先尝试将 转换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; }
    }

但它仍然不起作用。

4

1 回答 1

0

这是因为您不处置StreamWriter,因此它不会刷新到流中。试着把它放在一个using块中:

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

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

于 2016-02-29T19:38:26.090 回答