【发布时间】:2017-06-24 17:16:31
【问题描述】:
我有两个类,从 Treenode 派生的“公司”和“文档”。
[Serializable]
[XmlRoot("Company")]
public class Company : TreeNode, IXmlSerializable
{
private string _x;
private string _y;
public Company() { }
[XmlElement("X")]
public string X { get; set; }
[XmlElement("Y")]
public string Y { get; set; }
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
if (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "Company")
{
x = reader["X"].ToString;
y = reader["Y"].ToString;
}
}
public void WriteXml(XmlWriter writer)
{
writer.WriteElementString("X", this.X.ToString());
writer.WriteElementString("Y", this.Y.ToString());
}
}
public class Document
{
private int _id;
private string _name;
private Company _company;
public Document() { }
[XmlElement("ID")]
public int ID { get; set; }
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Company")]
public Company Comp { get; set; }
}
当我尝试序列化文档,然后保存到文件时,它的工作。但是当我反序列化时,读取器参数始终为空。有什么解决办法吗?
这是我的反序列化代码。 "sr" 是保存 xml 文本的变量。
var sr = new StreamReader(ms);
var myStr = sr.ReadToEnd();
XmlSerializer serializer = new XmlSerializer(typeof(List<Document>));
using (TextReader tr = new StringReader(myStr))
{
List<Document> docu = (List<Document>)serializer.Deserialize(tr);
}
我尝试实现 ISerialization 和调试但从未触发,并尝试覆盖序列化和反序列化方法,但没有运气。
我正在使用 .NET Framework 3.5
【问题讨论】:
-
您检查过生成的 XML 吗?
-
@Fildor 是的,我有支票。反序列化时,公司数据永远不会填充。
-
尝试删除 Company 类中的 IXmlSerializable 和 GetSchema、ReadXml 和 WriteXML 方法。然后再试一次。
-
哦,去掉 [XmlRoot("Company")] - 只有一个根!
-
完全有可能,是的。公司是否绝对有必要实施 TreeNode?难道不能有一个单独的 TreeNode-Child ,比如说“CompanyTreeNode”,它派生自 TreeNode 并有一个 Company 作为字段?
标签: c# xml serialization deserialization treenode