我实施IXmlSerializable
对于以下将 RGB 颜色值编码为单个字符串的类型:
public class SerializableColor : IXmlSerializable
{
public int R { get; set; }
public int G { get; set; }
public int B { get; set; }
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
var data = reader.ReadString();
reader.ReadEndElement();
var split = data.Split(' ');
R = int.Parse(split[0]);
G = int.Parse(split[1]);
B = int.Parse(split[2]);
}
public void WriteXml(XmlWriter writer)
{
writer.WriteString(R + " " + G + " " + B);
}
}
由于它是单个字符串,因此我想将其存储为属性以节省空间。但是一旦我添加[XmlAttribute]
对于我的财产,我收到以下异常:
{“无法序列化 SerializedColor 类型的成员“Color”。XmlAttribute/XmlText 不能用于对实现 IXmlSerialized 的类型进行编码。”}
有没有办法让它也作为属性工作?
遗憾的是(奇怪的是)根据此链接这是不可能的http://connect.microsoft.com/VisualStudio/feedback/details/277641/xmlattribute-xmltext-cannot-be-used-to-encode-types-implementing-ixmlserialized
为了解决该问题,我当前使用 XmlIgnore 属性来隐藏复杂属性并通过另一个属性将其公开为字符串
public class MyDto
{
[XmlAttribute(AttributeName = "complex-attribute")]
public string MyComplexPropertyAsString
{
get { return MyComplexMember.ToString(); }
set { MyComplexMember.LoadFromString(value); }
}
[XmlIgnore]
public MyComplexMember At { get; set; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)