2

我正在寻找一种自定义 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 中的所有内容转换为 aDictionary<string, object>但更喜欢更简洁的实现。

有什么方法可以控制这种程度的序列化?

4

1 回答 1

0

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

如果您希望保持 POCO 清洁,您可以创建一个实现IYamlTypeConverter. 我手头没有 PC 可以为您实现它,但您可以使用以下代码作为示例:

https://dotnetfiddle.net/1plIcc

(对不起,这里复制代码在智能手机上不起作用。当我可以访问合适的 PC 时,我会添加代码)

于 2016-06-29T20:21:45.033 回答