我正在尝试制作一个Angle类。当我将这个类序列化为xml我想跟随:
<Angle Unit="Degree">90</Angle>
or
<Angle Unit="Radian">3.14......</Angle>
目前,当我序列化我的课程时,我得到以下内容:
<Angle Unit="Degree">
<Degree>90</Degree>
</Angle>
or
<Angle Unit="Radian">
<Radian>90</Radian>
</Angle>
我知道带有[XmlText]的字符串是可能的,但有没有办法获得double或其他值,而无需自定义xmlwrite和xmlread?
以下显示了我的类代码的一部分:
[Serializable]
public struct Angle
{
[XmlAttribute]
public UnitType Unit;
public double Radian
{
get;
set;
}
public bool ShouldSerializeRadian();
public double Degree
{
get;
set;
}
public bool ShouldSerializeDegree();
}
使用Unit和shouldSerialize我选择要使用的值。
当我设置度数= 90时,弧度的值将是1.5707 ......
UnitType
是一个带有Degree和Radian的枚举。序列化时将使用unit = unittype.degree
度,序列化时将使用unit = unittype.radian
radain。
我用来选择我使用的代码的代码如下:
public bool ShouldSerializeRadian()
{
return (Unit == UnitType.Radian);
}
答案 0 :(得分:1)
不确定这是否是最佳解决方案,但您可以制作代理属性来处理Serilization / Deserialization。
喜欢的东西
[Serializable]
public class Angle
{
[XmlAttribute]
public UnitType Unit;
[XmlTextAttribute]
public double Value
{
get { return Unit == UnitType.Degree ? Degree : Radian; }
set
{
if (Unit == UnitType.Degree)
{
Degree = value;
return;
}
Radian = value;
}
}
[XmlIgnore]
public double Radian { get; set; }
[XmlIgnore]
public double Degree { get; set; }
}
结果:
<Angle Unit="Radian">70.8</Angle>
<Angle Unit="Degree">45.2</Angle>