将字段序列化为元素的属性

Serialize field as attribute of an element

我有

[XmlRoot("root")]
class Person
{
  [XmlAttribute("name")] 
  public strig Name {get;set;}
}

连载后我会得到:

<root name="...">
</root>

任何简单的获取方式

<root>
  <general name="...">
</root>

?

我的选择是:制作其他 class、使用 IXmlSerializable 等

有可能像下面这样吗?

// code not valid
[XmlElement("general")]
[XmlAttribute("name")] 
public strig Name {get;set;}

要获取内部元素,您需要使用 XmlElement 属性。因此,如果您创建一个包含 XmlAttribute("name") 属性 的 'general' class。然后你可以将它添加到你的 Person class.

[XmlRoot("root")]
class Person
{
    [XmlElement("general")]
    public General General {get; set;}
}
class General
{
    [XmlAttribute("name")] 
    public strig Name {get;set;}
}

我想我会继续使用 IXmlSerializable,因为:

[XmlRoot("root")]
class Person : IXmlSerializable
{
    [XmlAttribute("name")]
    public string Name {get;set;}

        public System.Xml.Schema.XmlSchema GetSchema() {
            return null;
        }

        public void ReadXml( XmlReader reader ) {
        ...
        }

        public void WriteXml( XmlWriter writer ) {
            writer.WriteStartElement( "root" );
            writer.WriteStartElement( "general", null );
            writer.WriteAttributeString( "action", Action );
            ...
            writer.WriteEndElement();
            writer.WriteEndElement();
        }
}