我正在写一个简单的类来序列化我的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; }
}
但它仍然无效。
答案 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。