Как видно из названия говорит, когда я десериализации следующий файл я только получить первый (и всегда первый) элемент:Массив десериализации возвращает только один элемент
<?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>
Мой код десериализации:
var list = (ServerConnections)mSerializer.Deserialize(inputStream)).Entries;
, а затем list.Count равно 1. ServerConnections выглядит следующим образом:
public class ServerConnections
{
public ServerConnectionEntry[] Entries { get; set; }
}
Там нет exceptio n происходит.
Edit: Проблема возникает, когда я включаю мой класс, который делает пользовательские XML-сериализации (реализует IXmlSerializable). Что она делает это следующим образом:
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());
}
Хотя данные содержат правильные данные после ReadXml десериализатор, который работает весь список останавливается и не читает никаких дополнительных элементов.
Вы правы, это не о десериализации как таковой, а под им используя неуправляемый класс (AuthHash), и это, по-видимому, вызывает проблему. Если я удалю AuthHash из xml, он будет считывать все элементы. – Muepe
Я показал, как вы можете сделать преобразование из base64 в байт [] и обратно ..., который должен решить все ваши проблемы. –
Спасибо за это, но в моем случае AuthHash - это класс C++/CLI, который обертывает неуправляемый объект. Таким образом, он нуждается в специальной «обработке» при сериализации/десериализации. – Muepe