Невозможно сериализовать KeyValuePair с 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 ответ
Это потому, что вы не избавляетесь от 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 для этого параметра.