2016-02-26 67 views
0

爲了能夠序列化和反序列化XML我這樣設計:添加一個新的領域一類是序列化

<?xml version="1.0" encoding="utf-8"?> 
<DbConnections xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <DbConnectionInfo> 
    <ServerName>SQLServer2k8</ServerName> 
    </DbConnectionInfo> 
    <DbConnectionInfo> 
    <ServerName>SQLServer2k8R2</ServerName> 
    </DbConnectionInfo> 
</DbConnections> 

我曾寫過這樣的下面兩類:

public class DbConnectionInfo 
{ 
    public string ServerName { get; set; } 
} 

[Serializable] 
[XmlRoot("DbConnections")] 
public class DbConnections: List<DbConnectionInfo> 
{ 
    //... 
} 

現在我想擴大我的XML格式,並添加一個多場這樣的,但在那裏是設計我的線人的方式屁股的方式,我不必在每個XML標籤重複它?像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<DbConnections xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <DbConnectionInfo> 
    <ServerName>SQLServer2k8</ServerName> 
    </DbConnectionInfo> 
    <DbConnectionInfo> 
    <ServerName>SQLServer2k8R2</ServerName> 
    </DbConnectionInfo> 

    <UseWindowsAuthentication>Yes</UseWindowsAuthentication> 
</DbConnections> 

所以我真的補充說,一條線以前的XML: 但我的問題是我應該如何修改我的類來添加呢?這是甚至可能或一個正確的設計?

<UseWindowsAuthentication>Yes</UseWindowsAuthentication> 

回答

1

也許這樣的事情

[Serializable] 
[XmlRoot("DbConnections")] 
public class DbConnections 
{ 
    List<DbConnectionInfo> DbConnectionInfos; 
    Boolean UseWindowsAuthentication; 
} 

編輯補充:如果你不想嵌套元素,裝飾你的類作爲這樣

public class DbConnections 
{ 
    [XmlElement("DbConnectionInfo")] 
    public List<DbConnectionInfo> DbConnectionInfos; 
    public Boolean UseWindowsAuthentication; 
} 

我測試了這一點,下面的XML是序列化的

XmlSerializer serializer = new XmlSerializer(typeof(DbConnections)); 
      string xml; 
      using (StringWriter textWriter = new StringWriter()) 
      { 
       serializer.Serialize(textWriter, oDbConnections); 
       xml = textWriter.ToString(); 
      } 

<?xml version="1.0" encoding="utf-16"?> 
<DbConnections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <DbConnectionInfo> 
    <ServerName>test</ServerName> 
    </DbConnectionInfo> 
    <DbConnectionInfo> 
    <ServerName>test 2</ServerName> 
    </DbConnectionInfo> 
    <UseWindowsAuthentication>true</UseWindowsAuthentication> 
</DbConnections> 

Here is a link to more info on decorating for xml serialization

+0

那麼我的XML標籤名稱將是DbConnectionInfos? – Bohn

+0

這取決於你用來序列化的方式以及你如何裝飾類。如上所述,您可以使此結構序列化。 – Nikki9696

+0

最後一個問題:是不是列表public List DbConnectionInfos;如果我們不用「新」初始化它會崩潰?我現在就開始測試你的方式 – Bohn