2016-06-29 20 views
1

我正在尋找一種自定義YamlDotNet序列化器輸出的乾淨方法。自定義字典的序列化爲Yaml

我有以下POCO:

​​

如果我在上面設置的值一樣

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

在您需要的解決方案,如何將desierialzer知道,在反序列化'鍵1:val1'? – lokusking

+0

@lokusking - 我只是擔心這方面的serlialization。這是爲了生成RAML,所以它只輸出數據而不是消耗數據。 – Fermin

回答

0

一個簡單的解決方法就是在MyClass實現IDictionary<string, string>。實際需要實施的唯一成員是統計員。在那裏你會返回字典的內容,以及每個附加屬性的另一個條目。

如果您希望將自己的POCO乾淨,你可以創建一個實現IYamlTypeConverter類。我不手邊有一個PC來實現它適合你,但你可以使用此代碼爲例:

https://dotnetfiddle.net/1plIcc

(對不起,這裏複製的代碼是不能工作在智能手機上。我會添加代碼的時候,當我有機會到合適的PC)

+0

謝謝安託萬。我使用IDictionary <>方法工作,但嘗試實現IYamlConverter並迭代Dictionary,但每次仍然輸出'Bar'鍵(除非我錯過了某些東西!) – Fermin