2017-03-04 113 views
1

我剛開始與Yaml合作,並且非常感激一些輸入。我正在創建一個YAML並試圖將其去除到現有的C#類中。 現有的C#類:將Yaml反序列化爲c#對象

[System.Xml.Serialization.XmlIncludeAttribute(typeof(FooType))] 

    public partial class BarType { 

     private int barVariable; 

     public Int Bar { 
     get { 
      return this.barVariable; 
     } 
     set { 
      this.barVariable = value; 
     } 
    } 


    } 

    public partial class FooType : BarType { 

     private string fooVariable; 
     public string Foo { 
     get { 
      return this.fooVariable; 
     } 
     set { 
      this.fooVariable = value; 
     } 
    } 


[System.Xml.Serialization.XmlRootAttribute("HeadType", Namespace="xyz", IsNullable=false)] 

public partial class HeadType { 

    private BarType[] barTypesField; 

    [System.Xml.Serialization.XmlArrayItemAttribute("FooService", typeof(FooType), IsNullable=false)] 

     public BarType[] BarTypes { 
      get { 
       return this.barTypesField; 
       } 
      set { 
       this.barTypesField = value; 
       } 
      } 

現在我有一個YAML,

HeadType: 
    - Bar: 0 
    - Bar: 29 

當我嘗試deserialze上述YAML,我沒有得到任何錯誤。

但是,當我將Yaml更改爲類似下面的內容時,它確實知道標籤Foo。

HeadType: 
    - Bar: 0 
    Foo: FooTest 

有沒有辦法實現這一目標?我曾嘗試下面這也多年平均值的工作:

HeadType: 
    FooType: 
    - Bar: 0 
     Foo: FooTest 

我使用的YAML點網系列化「YamlDotNet.Serialization」,這是序列化是如何工作的:

Deserializer deserializer = new Deserializer(); 
    var result = deserializer.Deserialize<RootType>(yamlInput1); 

其中root是類包含HeadType。

回答

0

嘗試使用

HeadType: 
    - !bar 
    Bar: 0 
    - !foo 
    Bar: 0 
    Foo: FooTest 

YamlDotNet不意味着基於本內容的實際類型,所以你需要告訴它這類型,它通過使用標籤。加載時,您需要使用解串器註冊這些標籤:

deserializer.RegisterTagMapping("!bar", typeof(BarType)); 
deserializer.RegisterTagMapping("!foo", typeof(FooType));