using XmlArrayItem attribute without XmlArray on Serializable C# class using XmlArrayItem attribute without XmlArray on Serializable C# class xml xml

using XmlArrayItem attribute without XmlArray on Serializable C# class


The following should serialize properly the way you want. The clue being [XmlElement("credentials")] on the list. I did this by taking your xml, generating a schema (xsd) from it in Visual Studio. Then running xsd.exe on the schema to generate a class. (And some small edits)

public class CredentialsSection{    public string Username { get; set; }    public string Password { get; set; }}[XmlRoot(Namespace = "", IsNullable = false)]public class configuration{    /// <remarks/>    public string logging { get; set; }    /// <remarks/>    [XmlElement("credentials")]    public List<CredentialsSection> credentials { get; set; }    public string Serialize()    {        var credentialsSection = new CredentialsSection {Username = "a", Password = "b"};        this.credentials = new List<CredentialsSection> {credentialsSection, credentialsSection};        this.logging = "log this";        XmlSerializer s = new XmlSerializer(this.GetType());        StringBuilder sb = new StringBuilder();        TextWriter w = new StringWriter(sb);        s.Serialize(w, this);        w.Flush();        return sb.ToString();    }}

give the following output

<?xml version="1.0" encoding="utf-16"?><configuration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <logging>log this</logging>  <credentials>    <Username>a</Username>    <Password>b</Password>  </credentials>  <credentials>    <Username>a</Username>    <Password>b</Password>  </credentials></configuration>