我有一个非常简单的控制台应用程序。忽略遗漏的检查,程序如下:
using System.Drawing;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
TestUnit speed = new();
XmlSerializer serializer = new(typeof(TestUnit));
using (FileStream fileStream = File.OpenWrite("foo.txt"))
serializer.Serialize(fileStream, speed);
FileStream stream = File.OpenRead("foo.txt");
TestUnit? sunit = serializer.Deserialize(stream) as TestUnit?;
public struct TestUnit : IXmlSerializable
{
public TestUnit() { }
public int Z { get; set; } = 0;
public Point C { get; set; } = new();
public XmlSchema? GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
reader.ReadStartElement("TestUnit");
var vals = reader.GetAttribute("Value").Split();
Z = int.Parse(vals[0]);
C = new Point(int.Parse(vals[1]), int.Parse(vals[2]));
reader.ReadEndElement();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("TestUnit");
writer.WriteAttributeString("Value", $"{Z} {C.X} {C.Y}");
writer.WriteEndElement();
}
}
问题是每当程序尝试运行
InvalidProgramException: Common Language Runtime detected an invalid program.
时,我都会收到错误serializer.Deserialize()
。程序连ReadXml()
方法都达不到。