如何XML序列化一个由固定文本和属性值组成的字符串?

How to XML serialise a string, composed of fixed text and attribute values?

中,我询问了如何 XML 将一个对象序列化为如下内容:

<PO X=0 Y=0 ... />

我的对象如下所示:

public class Offset
{
    public int X { get; set; }
    public int Y { get; set; }

如评论和答案中所述,这是无效的 XML,因此尝试 XML 将对象序列化为该对象毫无意义。

客户同意另一种格式(有效XML):

<PO>X=0 Y=0 ...</PO>

但是如何做到这一点?

我看到了完成此任务的三种方法:

我尝试了第一种方法但失败了,所以我决定创建一个新属性,这是我目前拥有的:

[XmlRoot(ElementName = "PO")]
public class Offset
{
    [XmlIgnore]
    public double X { get; set; }
    [XmlIgnore]
    public double Y { get; set; }
    [XmlIgnore]
    public double Z { get; set; }
    [XmlIgnore]
    public double Phi { get; set; }
    [XmlElement(ElementName = "output")]
    public string xml_output;

    public string generate_xml_output()
    { return $"X={X} Y={Y} Z={Z} PHI={Phi}"; }

    public Offset()
    { X = 0; Y = 0; Z = 0; Phi = 0;
      xml_output = generate_xml_output(); }

这是我现在的 XML:

<PO>
  <output>X=0 Y=0 Z=0 PHI=0</output>
</PO>

这很近,但没有雪茄:-)

有人知道我如何告诉 XML 序列化程序使用 output 属性作为“默认属性”(以便省略 <output> 标签)吗?

提前致谢

之后编辑

乍一看,一切似乎都很好,但 setter 现在出了问题。我自己写了一个解析器,但我的印象是,虽然它看起来不错,但缺少一些东西,并且弄乱了我的 XML 序列化。

这就是我的 class(使用 setter 的实现)的样子:

        [XmlText]
        public string xml_output
        {
            get { return $"X={X} Y={Y} Z={Z} PHI={Phi}"; }
            set { 
                  string[] temp = xml_output.Split(' ');
                  try 
                  { X = Convert.ToDouble(temp[0].Replace("X=","")); } 
                  catch (Exception) 
                  { X = 0; }
                  try
                  { Y = Convert.ToDouble(temp[1].Replace("Y=", "")); }
                  catch (Exception)
                  { Y = 0; }
                  try
                  { Z = Convert.ToDouble(temp[2].Replace("Z=", "")); }
                  catch (Exception)
                  { Z = 0; }
                  try
                  { Phi = Convert.ToDouble(temp[3].Replace("PHI=", "")); }
                  catch (Exception)
                  { Phi = 0; }
                }
        }

你知道我的 setter 丢了什么吗?

[XmlText]
public string CompositeOutput {
    get { return $"X={X} Y={Y} Z={Z} PHI={Phi}"; }
    set { /* your parse logic here *}
}