gpt4 book ai didi

c# - 如何使用自定义 IXmlSerializable 作为 XmlAttribute?

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:37 25 4
gpt4 key购买 nike

我为下面的类型实现了 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] 添加到我的属性中,就会出现以下异常:

{"Cannot serialize member 'Color' of type SerializableColor. XmlAttribute/XmlText cannot be used to encode types implementing IXmlSerializable."}

有没有办法让它也作为一个属性来工作?

最佳答案

可悲的是(奇怪的是)根据这个链接不可能http://connect.microsoft.com/VisualStudio/feedback/details/277641/xmlattribute-xmltext-cannot-be-used-to-encode-types-implementing-ixmlserializable

为了解决这个问题,我目前使用 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; }
}

关于c# - 如何使用自定义 IXmlSerializable 作为 XmlAttribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11635582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com