オブジェクトに逆シリアル化する必要がある XML があります。ほとんどの要素は文字列と整数に変換できますが、1 つの要素は数値として入力され、3 つのブール値に変換する必要があります。これは、ブール値への変換の背後にあるロジックです。
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;
}
}
}