反序列化 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);
}
}
}
}
我知道,我知道有关无法反序列化 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);
}
}
}
}