有人能帮我理解 IXmlSerializable 序列化从更旧版本的 .Net 开始的 double 以及现在如何正确执行它吗?

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

我正在移植部分 MathNet.Spatial 库以添加我需要的一些功能。我的项目以 .Net 7.0 为目标,库以更旧的版本为目标,我在移植序列化代码时遇到了问题。

我的类只包含两个字段(双 X,双 Y),就像图书馆那样。我需要为此类实现 IXmlSerializable。该库也实现了它,但我对如何用 .Net 7 重写以下代码一无所知。我用谷歌搜索了这个问题,但我一直碰到“往返”这个词,我很确定我知道这到底意味着什么,当您反序列化时,您拥有与序列化内容相同的副本。我是 c# 和 .Net 的新手,我正在以相当快的速度学习它,但这给我带来了麻烦,我必须把它做好。因此,如果有人可以帮助我移植这两个功能,那将对我有很大帮助。

`

    void IXmlSerializable.ReadXml(XmlReader reader)
    {
        

        if (reader.TryReadAttributeAsDouble("X", out var x) &&
            reader.TryReadAttributeAsDouble("Y", out var y))
        {
            reader.Skip();
            this = new Point2D(x, y);
            return;
        }

        if (reader.TryReadChildElementsAsDoubles("X", "Y", out x, out y))
        {
            reader.Skip();
            this = new Point2D(x, y);
            return;
        }

        throw new XmlException("Could not read a Point2D");
    }

    /// <inheritdoc />
    void IXmlSerializable.WriteXml(XmlWriter writer)
    {
        writer.
        writer.WriteElement("X", X, "G17");
        writer.WriteElement("Y", Y, "G17");
    }

`

我还注意到整个图书馆“G17”和“G15”经常出现在(反)序列化和 ToString 方法中,我想知道造成这种差异的原因是什么。

谢谢

我已经尝试过明显的剪切和粘贴,那是一条死胡同。我曾尝试寻找答案,但似乎从未找到令人满意的答案。 API 已经改变,我无法自己完成这个。

xmlreader xmlwriter mathnet-numerics ixmlserializable
© www.soinside.com 2019 - 2024. All rights reserved.