C# Xml 序列化:将类属性序列化为父类的属性

本文关键字:属性 序列化 父类 Xml | 更新日期: 2023-09-27 18:31:35

[Serializable]
public class XX
{
    [XmlAttribute("name")]
    public string name{get;set;}
}
[Serializable]
[XmlRoot("tree")]
public class XY
{
    public XX Name{get;set;}
    [XmlAttribute("surname")]
    public Surname{get;set;}
}

嗨,我正在尝试将类似于上述此类的 XML 序列化为XML。我的问题是 XX 类的属性应该序列化为 XY 类序列化的属性,而不是 XmlElement。有谁知道它是否可能??为了澄清一下,这里有一个应该生成的 xml 文件的示例:

<tree name="Jack" surname="Thompson">
</tree>

我不要这个:

<tree surname="Thompson">
    <name>Jack</name>
</tree>

C# Xml 序列化:将类属性序列化为父类的属性

您可能应该调整类结构以反映所需的 xml。 如果"name"只是元素"tree"的一个属性,那么理想情况下,字符串"name"是类"XY"的属性,而类"XX"根本不存在。

但是,如果您确实需要这些类像现在一样存在,那么我建议您创建第三个类来充当代理项,该类将具有与您的 xml 匹配的结构,并在类 XY 中创建一种方法,该方法将自身转换为您的新类。然后序列化新类而不是 XY 和 XX。

我不认为你可以这样做。XML 的结构告诉序列化程序如何工作。如果在父对象中将属性标记为名为 name 的属性,则序列化程序将不知道要使用哪个name