反序列化 XML (C#) 时出错:XML 文档 (2, 2) 中存在错误(但 XmlSerializer 创建了它)

Error Deserializing XML (C#): There is an error in XML document (2, 2) (but XmlSerializer created it)

我知道,我知道有关无法反序列化 XML 并出现错误 "There is an error in XML document (2, 2)." 的问题在互联网上随处可见,但我仍然感到困惑。

我有一个 XML 使用来自 c# class 的 XmlSerializer 创建的文档。此文档无法反序列化,出现异常:

There is an error in XML document (2, 2).
Inner Exception: The server could not be contacted.
Root inner exception: The LDAP server is unavailable.

我正在使用 XmlSerializer 进行序列化和反序列化,并且 st运行gely,有问题的 XML 文档可以在另一台计算机上使用相同的代码进行反序列化。

我使用以下代码序列化和反序列化我在 C# 中生成的 classes:

    public static T DeserializeObject<T>(string filename)
    {
        Console.WriteLine("Reading with XmlReader");

        // Create an instance of the XmlSerializer specifying type and namespace.
        XmlSerializer serializer = new
        XmlSerializer(typeof(T));

        // A FileStream is needed to read the XML document.
        FileStream fs = new FileStream(filename, FileMode.Open);
        xml.XmlReader reader = xml.XmlReader.Create(fs);

        // Declare an object variable of the type to be deserialized.
        T i;

        // Use the Deserialize method to restore the object's state.
        i = (T)serializer.Deserialize(reader);
        fs.Close();
        return i;
    }

    public static void WriteObject<T>(T value, string filename)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        TextWriter tw = new StreamWriter(filename);
        serializer.Serialize(tw, value);
        tw.Close();
    }

XML 文档本地存储在: C:\Users\username\AppData\Local\myapp\myxmldoc.xml

并遵循以下格式:

<?xml version="1.0" encoding="utf-8"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Id xsi:nil="true" />
  <Property1>text</Property1>
  <Property2>0000000</Property2>
  <Property3>
    <Property31>
      <Property311>text</Property311>
      <Property312>text</Property312>
    </Property31>    
  </Property3>  
  <Property4 />
  <Property5>false</Property5>
</MyClass>

我使用下面的代码反序列化:

myclassvar = SerialiseXML.DeserializeObject<MyClass>(xmldocpath);

其他 classes 正在序列化和反序列化,XML 在有问题的计算机上很好。

哦,为了好玩,我 运行 代码通过了验证器,没有发现任何错误。

有什么想法吗?

鉴于您的错误消息,LDAP 服务器似乎不可用,因为无法联系到它。这可能是由 class 中的 属性 引起的,您正在反序列化,在设置其值时调用 LDAP 服务器。以下面的代码为例,如果服务器名不合法,反序列化时会连接不上服务器:

[Serializable]
public class TestData
{
   private bool connect;

   private TcpClient connection;

   public string ServerName {get; set;}

   public bool ConnectToServer { 
       get { return this.connect; }
       set { 
          if (this.connect = value)
          {
              this.connection = new TcpConnection(this.ServerName, 8080);
          }
       }
   }
}