Treenodeから派生した "company"と "document"という2つのクラスがあります。Treenodeから派生したXMLのシリアライズ/逆シリアル化
[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; }
}
ドキュメントをシリアル化しようとすると、そのファイルに保存されます。しかし、私はdeserialize時、リーダーパラメータは常にnullです。どんな解決策ですか?
これは逆シリアル化のためのコードです。 "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とデバッグを実装しようとしたが解雇決して、およびシリアル化およびデシリアライズする方法、および運をオーバライドしてみてください。
私が正しくIXmlSerializable
を実装し、
結果XMLを確認しましたか? – Fildor
@Fildorはい、私は小切手を持っています。デシリアライズすると、会社のデータが一杯になることはありません。 – Blishton
CompanyクラスのIXmlSerializableメソッドとGetSchemaメソッド、ReadXmlメソッド、およびWriteXMLメソッドを削除してみます。その後、もう一度試してください。 – Fildor