2014-11-02 83 views
3

我在發現yaml和yamldotnet。很抱歉,如果這是一個非常基本的問題:YamlDotNet和自定義類型

  • 它任何意義,定義使用驚歎號在YAML用戶定義的類型,如:

    紅:顏色{紅:255,綠色:0,藍色:0}

  • YamlDotNet如何反序列化?換句話說,有沒有一種方法可以確保類型顏色映射到.net中相應的顏色類型?

  • 從我的以下示例https://dotnetfiddle.net/HD2JXM的理解,YamlDotNet使用YAML文件和.NET類映射YAML屬性相應的類屬性(如在示例中所示,這可以通過註解來定製)之間的隱式對應。但是沒有進行類型檢查。

爲了進一步澄清事情。我有以下YAML文件,它對應於一組小部件:

controls: 
    - Button: 
     id: 1 
     text: Hello Button World 
    - Label: 
     id: 2 
     text: Hello Label World 
    - TextView: 
     id: 3 
     content: > 
     This is some sample text that will appear 
     in a text view. 

而且我想它映射到在C#中相應類型的層次結構:

class AOPage 
{ 
    public IList<AOControl> Controls { get; set; } 

} 

class AOControl 
{ 
    public int Id { get; set;} 
} 

class AOLabel : AOControl 
{ 
    public String Text { get; set;} 
} 

class AOButton : AOControl 
{ 
    public String Text { get; set;} 
} 

class AOTextView : AOControl 
{ 
    public String Contents{ get; set;} 
} 

注意,也存在類似的問題海報在這裏:Using custom type resolver,這還沒有得到回答。

謝謝!

回答

0

如果您未指定標記,則反序列化程序將使用正在反序列化的對象圖中的類型信息。

爲了做到你想要YamlDotNet什麼,最簡單的方法是使用本地標籤,讓我們說!!color,然後註冊爲標籤的標籤映射:

deserializer.RegisterTagMapping("tag:yaml.org,2002:color", typeof(Color)); 

你可以看到一個工作示例在DeserializeCustomTags unit test

+0

Antoine感謝您的反饋!根據您的建議,我想通過使用本地標籤嘗試一些稍微不同的顏色在YAML文件:! --- 顏色 紅:255 綠色:0 藍:0 但我GUET一個TypeException時我這樣做。 – BigONotation 2014-11-05 20:32:36