Comme le dit le titre quand je désérialiser le fichier suivant je ne reçois que le premier (et toujours le premier) élément:Tableau désérialisation seulement retour 1 élément
<?xml version="1.0"?>
<ServerConnections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Entries>
<ServerConnectionEntry>
<Name>Local</Name>
<Host>127.0.0.1</Host>
<Port>15556</Port>
<Username>TestUser</Username>
<AuthHash>
<base64Binary>u7a0NN4uOvCrb5t5UWVVEl14Ygo=</base64Binary>
</AuthHash>
</ServerConnectionEntry>
<ServerConnectionEntry>
<Name>Local2</Name>
<Host>127.0.0.1</Host>
<Port>15556</Port>
<Username>TestUser</Username>
<AuthHash>
<base64Binary>u7a0NN4uOvCrb5t5UWVVEl14Ygo=</base64Binary>
</AuthHash>
</ServerConnectionEntry>
</Entries>
</ServerConnections>
Mon code à deserialize:
var list = (ServerConnections)mSerializer.Deserialize(inputStream)).Entries;
et list.Count est alors 1. ServerConnections ressemble que:
public class ServerConnections
{
public ServerConnectionEntry[] Entries { get; set; }
}
Il n'y a pas exceptio n passe.
Edit: Le problème se produit lorsque j'inclus ma classe qui fait sérialisation XML personnalisé (implémente IXmlSerializable). Ce qu'il fait est le suivant:
void BigNumber::ReadXml(System::Xml::XmlReader^ reader) {
reader->ReadStartElement();
XmlSerializer^ serializer = gcnew XmlSerializer(cli::array<Byte>::typeid);
cli::array<Byte>^ data = (cli::array<Byte>^)serializer->Deserialize(reader);
pin_ptr<unsigned char> ptr(&data[0]);
BN_bin2bn(ptr, data->Length, mNumber);
}
void BigNumber::WriteXml(System::Xml::XmlWriter^ writer) {
XmlSerializer^ serializer = gcnew XmlSerializer(cli::array<Byte>::typeid);
serializer->Serialize(writer, ToByteArray());
}
Bien que les données contient les données correctes après ReadXml désérialiseur qui fonctionne toute la liste des arrêts et ne lit pas d'éléments supplémentaires.
Vous avez raison, ce n'est pas une question de désérialisation en soi mais en dessous en utilisant une classe non gérée (l'AuthHash) et cela semble causer un problème. Si je supprime l'AuthHash du xml, il lit tous les éléments. – Muepe
J'ai montré comment vous pouvez faire la conversion de base64 à octet [] et retour ... qui devrait résoudre tous vos problèmes –
Merci pour cela, mais dans mon cas, l'AuthHash est une classe C++/CLI qui encapsule un non géré objet. Il a donc besoin d'un "traitement" spécial lorsqu'il est sérialisé/désérialisé. – Muepe