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

时间:2015-03-04 17:17:51

标签: c# xml xmlserializer

我知道,我知道有关无法反序列化XML的问题,错误“XML文档中存在错误(2,2)。”在互联网上乱七八糟,但我仍然难过。

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

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进行序列化和反序列化,奇怪的是,有问题的XML文档可以使用另一台计算机上的相同代码进行反序列化。

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

    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 \用户名\应用程序数据\本地\ 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);

其他类正在对违规计算机进行串行化和反序列化。

哦,为了踢,我通过一个没有发现错误的验证器运行代码。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

鉴于您的错误消息,看起来LDAP服务器不可用,因为无法联系到它。这可能是由于您正在反序列化的类中的属性在设置其值时调用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);
          }
       }
   }
}