タイトルが示すように、次のファイルを逆シリアル化すると、最初の (常に最初の) 要素のみが取得されます。
<?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; }
}
例外は発生していません。
編集: カスタム 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 の後に正しいデータが含まれていますが、リスト全体を動作させるデシリアライザーは停止し、追加の要素を読み取りません。