我知道,我知道有关无法反序列化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);
其他类正在对违规计算机进行串行化和反序列化。
哦,为了踢,我通过一个没有发现错误的验证器运行代码。
有什么想法吗?
答案 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);
}
}
}
}