自定义Dictionary到Yaml的序列化

时间:2016-06-29 09:32:42

标签: c# yamldotnet

我正在寻找一种自定义YamlDotNet序列化器输出的简洁方法。

我有以下POCO:

public class MyClass{
  public string Foo { get;set; }
  public Dictionary<string, string> Bar { get;set; }
}

如果我在其上设置值

var class = new MyClass{ Foo = "bla" };
class.Bar["key1"] = "val1";
class.Bar["key2"] = "val2";

并序列化,然后我会得到结果:

Foo: bla
Bar:
  key1: val1
  key2: val2

但是,我需要得到的是

Foo: bla
key1: val1
key2: val2

我无法将key1,key2等添加为MyClass的属性,因为它们在运行时(键值和键数)都是未知的。有没有办法可以使用YamlDotNet做到这一点?

我考虑使用反射将MyClass中的所有内容转换为Dictionary<string, object>,但更喜欢更清晰的实现。

有没有什么方法可以控制序列化到这个程度?

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是在IDictionary<string, string>中实施MyClass。实际需要实现的唯一成员是枚举器。在那里,您将返回字典的内容,以及每个附加属性的另一个条目。

如果您希望保持POCO清洁,可以创建一个实现IYamlTypeConverter的类。我没有掌上电脑来为您实现它,但您可以使用此代码作为示例:

https://dotnetfiddle.net/1plIcc

(很抱歉,此处复制代码无法在智能手机上运行。我将在访问适当的PC时添加代码)