c# - 数组反序列化只返回 1 个元素

标签 c# .net xml

正如标题所说,当我反序列化以下文件时,我只得到第一个(而且总是第一个)元素:

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

没有异常(exception)发生。

编辑: 当我包含执行自定义 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 之后数据包含正确的数据,但运行整个列表的反序列化器停止并且不读取任何其他元素。

最佳答案

同样如此,这对我来说似乎工作正常,使用与您的代码类似的代码。

 public class Program
{
    static void Main(string[] args)
    {
        XmlSerializer deserializer = new XmlSerializer(typeof(ServerConnections));
        var reader = new StreamReader(@"../../Test.xml");
        var entries = (ServerConnections)deserializer.Deserialize(reader);
        reader.Close();
    }

    public class ServerConnections
    {
        public ServerConnectionEntry[] Entries { get; set; }
    }

    public class ServerConnectionEntry
    {
        public string Name { get; set; }
        public string Host { get; set; }
        public string Port { get; set; }
        public string Username { get; set; }
        public BinaryCode AuthHash { get; set; }
    }

    public class BinaryCode
    {
        [XmlElement("base64Binary")]
        public string Code { get; set; }
    }
}

关于c# - 数组反序列化只返回 1 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17249555/

相关文章:

c# - 在 .Net 中编译 C# 程序后的 MSIL 文件在哪里?

xml - python解析xml并获取root下每个子元素的属性值

c# - 当需要在悬停时访问特定子类信息时,如何在 Unity C# 中向下转型?

mysql - 从文件或数据库生成 CSS 文件 (PHP)

c# - 想要一个用于传入数据的 .Net 套接字事件处理程序

c# - 比较 DataGridView 单元格中的新旧值

以 WCF 为模型的 ASP.NET MVC3

c# - 事件处理程序同步

c# - Crystal 报表列名不明确错误。

c# - 使用大量文本更新多行文本框的最快方法