首页 > 解决方案 > C#如何将复杂类型的xml序列化为xml属性?

问题描述

我想使用 XmlSerializer 来序列化一个类,典型的东西。我的一个区别是我想将自定义对象“ComplexType”序列化为属性,而不是子元素。

我见过其他堆栈溢出问题,答案说这是不可能的。我知道那是错误的。

错误是这样的:

“XmlAttribute/XmlText 不能用于编码复杂类型。”

- 或者 -

“XmlAttribute/XmlText 不能用于对实现 IXmlSerializable 的类型进行编码。”

只需将 myfield 从 ComplexType 更改为 DateTime 即可。DateTime 绝对是复杂的,所以我只需要知道要在类或属性中更改什么。

例如:是的

<Container myComplexType="specialencoding" />

例如:没有

<Container>
   <myComplexType>specialencoding</myComplexType>
</Container>

- 看看第一个有多好......我想要那个。

-- 代码是这样的...

[XmlRoot(ElementName="Container")]
public class Container
{
  [XmlAttribute(AttributeName="myComplexType")]
  public ComplexType myfield = new ComplexType();
}


public class ComplexType
{
    public ComplexType(){}
    public ComplexType(string encoding){}
    public override string ToString() {return "specialencoding";}
}

如果我实现 ComplexType : IXmlSerializable,我会收到上面的第二条错误消息。

使用的基本序列化程序:

XmlSerializer serializer = new XmlSerializer(typeof(Container));
serializer.serialize("outfile.xml", new Container());

标签: c#xmlserializationxml-serialization

解决方案


尝试这个 :

        private ComplexType _myfield = new ComplexType();

        [XmlAttribute(AttributeName = "myComplexType")]
        public string myfield {
            get { return _myfield.ToString();}
        }
    }
    public class ComplexType
    {
        public ComplexType(){}
        public ComplexType(string encoding){}
        public override string ToString() {return "specialencoding";}
    }

推荐阅读