我有一些需要反序列化为对象的 XML。大多数元素都可以转换为字符串和整数,但有一个元素以数字形式出现,我需要将其转换为三个布尔值。这是转换为布尔值背后的逻辑:
switch (_valFromXML)
{
case 0:
_bool1= true;
break;
case 1:
_bool2= true;
break;
case 2:
_bool1= true;
_bool2= true;
break;
case 3:
_bool3= true;
break;
case 4:
_bool1= true;
_bool3= true;
break;
case 5:
_bool2= true;
_bool3= true;
break;
case 6:
_bool1= true;
_bool2= true;
_bool3= true;
break;
}
我曾尝试创建像本例中那样的隐式运算符,但我看到的唯一被调用的是我的无参数构造函数:
http://forums.asp.net/t/1187054.aspx
这是被反序列化的属性:
private ConvertElement _convertElement;
[XmlElement("ConvertElement", typeof(ConvertElement))]
public ConvertElement ConvertElement
{
get { return _convertElement; }
set { _convertElement= value; }
}
我可以整天反序列化为整数,但由于某种原因,我无法将元素转换为自定义类型。这是我试图从元素创建的类:
[Serializable]
public class ConvertElement
{
int _value;
bool _bool1;
bool _bool2;
bool _bool3;
public static implicit operator int(ConvertElement x)
{
return x.Value;
}
public static implicit operator ConvertElement(int value)
{
return new ConvertElement(value);
}
public int Value
{
get { return _value; }
set { _value = value; }
}
public ConvertElement()
{
}
public DocSelection(int value)
{
_value= value;
switch (_value)
{
case 0:
_bool1= true;
break;
case 1:
_bool2= true;
break;
case 2:
_bool1= true;
_bool2= true;
break;
case 3:
_bool3= true;
break;
case 4:
_bool1= true;
_bool3= true;
break;
case 5:
_bool2= true;
_bool3= true;
break;
case 6:
_bool1= true;
_bool2= true;
_bool3= true;
break;
}
}
}