【发布时间】:2018-12-06 19:04:44
【问题描述】:
我想使用 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());
【问题讨论】:
-
Xml 属性是一个字符串。当您将 XmlAttribute 设为 DateTime 时,它会变成带双引号的字符串。如果它很复杂,那么 DateTime 周围就不会有引号。
-
对,我可以将我的类型转换为简单的字符串/从简单的字符串转换,所以我希望能够表现得像 DateTime 并写入属性 - 带引号。
-
我见过其他堆栈溢出问题,答案说这是不可能的。我知道那是错误的。 - 您能否分享不符合您要求的答案,以免我们重复努力?
-
架构类型 xs:dateTime 是简单类型,不是复杂类型。 XSD 中的复杂类型是包含元素和字符内容的类型。简单地拥有一个内部微语法并不会使它变得复杂。
标签: c# xml serialization xml-serialization