我正在寻找一种自定义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>
,但更喜欢更清晰的实现。
有没有什么方法可以控制序列化到这个程度?
答案 0 :(得分:0)
一个简单的解决方案是在IDictionary<string, string>
中实施MyClass
。实际需要实现的唯一成员是枚举器。在那里,您将返回字典的内容,以及每个附加属性的另一个条目。
如果您希望保持POCO清洁,可以创建一个实现IYamlTypeConverter
的类。我没有掌上电脑来为您实现它,但您可以使用此代码作为示例:
https://dotnetfiddle.net/1plIcc
(很抱歉,此处复制代码无法在智能手机上运行。我将在访问适当的PC时添加代码)