Je sérialise un objet en utilisant c #. Je reçois un résultat dans ce format ci-dessous
<?xml version="1.0"?>
<Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Users>
<User Id="11005477969327" CreateDate="06/03/2011" LastSendDate="1/1/0001" />
<User Id="11034688201594" CreateDate="04/22/2012" LastSendDate="1/1/0001" />
<Users
</User>
Mais je veux un résultat dans ce format.
<?xml version="1.0"?>
<Users>
<User Id="11005477969327" SendDate="1/1/0001" NextSendDate="2/7/2012 11:13:30 AM" />
<User Id="11034688201594" SendDate="1/1/0001" NextSendDate="2/7/2012 11:13:30 AM" />
</Users>
ici mon code
public class Users
{
[XmlArray("Users")]
public List<User> ListData { get; set; }
public string GetXML()
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
XmlSerializer sr = new XmlSerializer(typeof(Users));
sr.Serialize(ms, this);
ms.Position = 0;
return System.Text.Encoding.UTF8.GetString(ms.ToArray());
}
}
public class User
{
[XmlAttribute("Id")]
public Int64 UserId { get; set; }
[XmlAttribute("CreateDate")]
public string CreateDate { get; set; }
[XmlAttribute("LastSendDate")]
public string LastSendDate { get; set; }
}
Vous devez simplement remplacer [XmlArray("Users")]
par [XmlElement("User")]
Cet attribut indique au sérialiseur que vous souhaitez stocker tous ces éléments utilisateur sous un nœud particulier "Utilisateurs", si vous le remplacez par XmlElement
, serialzer stockera tous ces utilisateurs en ligne (juste sous la première balise Utilisateurs) tout comme vous J'aime ça.
Pour ce qui est de xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
espaces de noms. Ils sont ajoutés automatiquement, mais ils sont inoffensifs, car tous vos éléments sont dans l'espace de noms par défaut. Vous pouvez ajouter le code suivant à votre appel XmlSerializer
afin de les supprimer:
var xns = new XmlSerializerNamespaces();
var serializer = new XmlSerializer(users.GetType());
xns.Add(string.Empty, string.Empty);
//...
serializer.Serialize(stream, users, xns);
Vous devez écrire:
XmlSerializer sr = new XmlSerializer(typeof(Users));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
sr.Serialize(ms, this, ns);