2016-05-13 63 views
0

我正在創建一個對象,它將被序列化並根據XSD進行驗證以創建一個XML文件。我遇到的問題是在XML某些節點是重複的,但有不同的名稱,到目前爲止,我有以下幾點:對象自動屬性的複製

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); 
     } 

    } 

我的問題是,我怎麼能在這裏最小化領域的重複?我通常可能會初始化一個保存值的獨立對象,但看起來這會影響序列化。

感謝。

+0

我不這麼認爲,我試圖在這裏連載並且有一個複製名稱,主要,次要的對象。修訂和構建屬性,我需要儘量減少重複而不影響序列化。 –

+0

planningSoftware和版本具有相同的屬性,因此您可以爲這兩個類創建一個通用基類,然後繼承基類。 – 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; } 
} 

您可以驗證以下生產與您的初始代碼相同的XML輸出:

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

謝謝,這很好地排序。 –