2017-03-04 3 views
1

私はYamlとの作業を開始したばかりです。私はYAMLを作成し、それを既存のC#クラスにdeserailizeしようとしています。 既存のC#クラス:私はYAML上記deserialzeしようとすると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 

を持っています。

しかし、私はYamlを以下のように変更すると、タグFooについて知っています。

HeadType: 
    - Bar: 0 
    Foo: FooTest 

これを達成する方法はありますか?私はYAMLネット連載「YamlDotNet.Serializationを」ドット、これは直列化が機能している方法です使用しています

HeadType: 
    FooType: 
    - Bar: 0 
     Foo: FooTest 

ルートクラスである
Deserializer deserializer = new Deserializer(); 
    var result = deserializer.Deserialize<RootType>(yamlInput1); 

私もdoesnot仕事その下に試してみましたHeadTypeを含む。

答えて

0

あなたはそれがタグを使用している入力し、それを伝える必要がありますので、

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

YamlDotNetコンテンツ存在に基づいて実際の型を推測しません使用してみてください。読み込み時に、これらのタグをデシリアライザに登録する必要があります。

deserializer.RegisterTagMapping("!bar", typeof(BarType)); 
deserializer.RegisterTagMapping("!foo", typeof(FooType)); 
関連する問題