c# - 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());
解决方案
尝试这个 :
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";}
}
推荐阅读
- javascript - 尝试使用清晰的 Node.js 调整流图像的大小
- javascript - 有没有办法在 Postman 中只使用一个请求,使用两个 API?
- python - pyside 按键事件无效
- swift - Swift - 内容视图的大小与 UITableViewCell 不匹配
- python - Keras后端自定义损失函数的理解列表
- ios - 如何在没有触摸标记的情况下在 iOS swift 中显示谷歌地图中的标记标题
- gradle - 使用 Jar gradle 任务时如何避免命名冲突?
- r - R:比较多列对并将值放在新的对应变量上
- odoo - 如何在 Odoo 中再次导航回视图?
- android - 在 Android 上按 ABI 拆分资产