IXmlSerializable 结构在 Deserialize() 上抛出 InvalidProgramException

问题描述 投票:0回答:0

我有一个非常简单的控制台应用程序。忽略遗漏的检查,程序如下:

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()
方法都达不到。

c# xml-serialization
© www.soinside.com 2019 - 2024. All rights reserved.