2016-05-13 14 views
0

XMLファイルを作成するためにXSDに対してシリアル化され、検証されるオブジェクトを作成しています。どのように私はここではフィールドの重複を最小限に抑えることができ、オブジェクトオートプロパティの複製

public class export 
    { 
     public info info { get; set; } 
     public design design { get; set; } 
    } 

    public class info 
    { 
     public DateTime exportDateTime { get; set; } 
     public string duration { get; set; } 
     public planningSoftware planningSoftware { get; set; } 
     public exporter exporter { get; set; } 
    } 

    public class planningSoftware 
    { 
     public string name { get; set; } 
     public string major { get; set; } 
     public string minor { get; set; } 
     public string revision { get; set; } 
     public string build { get; set; } 
    } 

    public class exporter 
    { 
     public version version { get; set; } 
     public module module { get; set; } 
    } 

    public class version 
    { 
     public string name { get; set; } 
     public string major { get; set; } 
     public string minor { get; set; } 
     public string revision { get; set; } 
     public string build { get; set; } 
    } 

    public class module 
    { 
     public string name { get; set; } 
     public string major { get; set; } 
     public string minor { get; set; } 
     public string revision { get; set; } 
     public string build { get; set; } 
    } 

    public static void buildXML() 
    { 
     var export = new export() 
     { 
      info = new info() 
      { 
       exportDateTime = DateTime.Today, 
       duration = 10, 
       planningSoftware = new planningSoftware() 
       { 
        name = "Planning App", 
        major = "10", 
        minor = "4", 
        revision = "6", 
        build = "225" 
       }, 
       exporter = new exporter() 
       { 
        version = new version() 
        { 
         name = "App Test", 
         major = "10", 
         minor = "1", 
         revision = "0", 
         build = "201" 

        }, 
        module = new module() 
        { 
         name = "App Test Module", 
         major = "5", 
         minor = "2", 
         revision = "1", 
         build = "220" 
        } 
       } 
      } 
     }; 

     var s = new XmlSerializer(typeof(export)); 
     using (var f = File.Open("export.xml", FileMode.Create)) 
     { 
      s.Serialize(f, export); 
     } 

    } 

私の質問は:私がいる問題は、XML内の特定のノードが重複しているが、別の名前で、これまでのところ、私は以下の持っているのですか?私は通常、値を保持する別個のオブジェクトを初期化するかもしれませんが、これはシリアル化に影響するように見えます。

ありがとうございました。

+0

私はここで連載しようとしています。メジャー、マイナーな名前を複製しているオブジェクトがあります。リビジョンとビルドのプロパティ、私はシリアライゼーションに影響を与えることなく、重複を最小限に抑える必要があります。 –

+0

planningソフトウェアとバージョンには同じプロパティがあり、2つのクラスの共通基本クラスを作成してから、基本クラスを継承することができます。 – jdweng

答えて

2

xmlのプロパティの名前は、デフォルトではプロパティの名前に基づいており、のタイプの名前はではありません。

だから、単に名前とバージョンを保持するための一つのタイプを作成します。あなたの他の種類で次に

public class VersionedName 
{ 
    public string name { get; set; } 
    public string major { get; set; } 
    public string minor { get; set; } 
    public string revision { get; set; } 
    public string build { get; set; } 
} 

は、そのタイプのあなたの特性を宣言します。

public class Export 
{ 
    public Info info { get; set; } 
} 

public class Info 
{ 
    public DateTime exportDateTime { get; set; } 
    public int duration { get; set; } 
    public VersionedName planningSoftware { get; set; } 
    public Exporter exporter { get; set; } 
} 

public class Exporter 
{ 
    public VersionedName version { get; set; } 
    public VersionedName module { get; set; } 
} 

次が生じていることを確認することができます

var export = new Export() 
{ 
    info = new Info() 
    { 
     exportDateTime = DateTime.Today, 
     duration = 10, 
     planningSoftware = new VersionedName() 
     { 
      name = "Planning App", 
      major = "10", 
      minor = "4", 
      revision = "6", 
      build = "225" 
     }, 
     exporter = new Exporter() 
     { 
      version = new VersionedName() 
      { 
       name = "App Test", 
       major = "10", 
       minor = "1", 
       revision = "0", 
       build = "201" 

      }, 
      module = new VersionedName() 
      { 
       name = "App Test Module", 
       major = "5", 
       minor = "2", 
       revision = "1", 
       build = "220" 
      } 
     } 
    } 
}; 

var s = new XmlSerializer(typeof(Export)); 
using (var f = File.Open("export.xml", FileMode.Create)) 
{ 
    s.Serialize(f, export); 
} 
+0

ありがとう、それはうまく並べ替えます。 –