serialize serializar net deserialize deserializar c# xml xml-serialization serializable xml-deserialization

serializar - usando el atributo XmlArrayItem sin XmlArray en la clase Serializable C#



serialize list to xml c# (1)

Quiero XML en el siguiente formato:

<configuration><!-- Only one configuration node --> <logging>...</logging><!-- Only one logging node --> <credentials>...</credentials><!-- One or more credentials nodes --> <credentials>...</credentials> </configuration>

Estoy intentando crear una Configuration clase que tiene el atributo [Serializable] . Para serializar los nodos de credenciales, tengo lo siguiente:

[XmlArray("configuration")] [XmlArrayItem("credentials", typeof(CredentialsSection))] public List<CredentialsSection> Credentials { get; set; }

Sin embargo, cuando serializo esto a XML, el XML está en el siguiente formato:

<configuration> <logging>...</logging> <configuration><!-- Don''t want credentials nodes nested in a second configuration node --> <credentials>...</credentials> <credentials>...</credentials> </configuration> </configuration>

Si [XmlArray("configuration")] la línea [XmlArray("configuration")] , obtengo lo siguiente:

<configuration> <logging>...</logging> <Credentials><!-- Don''t want credentials nodes nested in Credentials node --> <credentials>...</credentials> <credentials>...</credentials> </Credentials> </configuration>

¿Cómo puedo serializar esto como quiero, con múltiples nodos <credentials> dentro del nodo raíz único <configuration> ? Quería hacer esto sin tener que implementar IXmlSerializable y hacer una serialización personalizada. Así es como se describe mi clase:

[Serializable] [XmlRoot("configuration")] public class Configuration : IEquatable<Configuration>


Lo siguiente debe serializarse correctamente de la manera que desee. La pista está en [XmlElement("credentials")] en la lista. Hice esto tomando su xml, generando un esquema (xsd) a partir de él en Visual Studio. Luego ejecuta xsd.exe en el esquema para generar una clase. (Y algunas ediciones pequeñas)

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

dar la siguiente salida

<?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>