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>