使用自定义类型强制转换运算符反序列化对象时返回了错误的数据
本文关键字:返回 对象 错误 数据 反序列化 运算符 自定义 类型 转换 | 更新日期: 2023-09-27 18:23:51
我有一个类被设计为像UInt16一样执行。因此,我可以使用更具描述性的Address myProp,而不是使用:UInt16 myProp。
这里有一个片段:
public class Address
{
public UInt16 address { get; set; }
private static UInt16 add;
public static implicit operator UInt16(Address address)
{
return add;
}
public static implicit operator Address(UInt16 i)
{
Address temp = new Address(i);
return temp;
}
public Address(UInt16 value)
{
address = value;
add = value;
}
public Address() { }
}
然后我有一处房产:公共地址myAddress{get;set;}
其余的代码运行得很好。
这个类需要作为xml进行序列化和反序列化。
在序列化之后,我在我的xml 中有
<myAddress>
<address>7</address>
</myAddress>
但是,在我取消xml文件的验证后,我无法将myAddress属性恢复到7。
也许是个奇怪的问题。。。知道吗?
返回UInt16
的转换运算符已损坏-它使用的是静态变量,该变量将由最近构造的值设置。您忽略了传递给转换运算符的值,这难道不奇怪吗?
目前还不清楚为什么你有静态变量,但我强烈怀疑你应该去掉它,你的转换运算符应该是:
public static implicit operator UInt16(Address address)
{
return address.address;
}
您还应该重命名属性以遵循.NET命名约定。。。理想情况下无论如何都要更改名称,因为Address
类型同时具有Address
属性是很奇怪的。无论如何,还不清楚该类型意味着什么,但也许Value
至少会稍微好一点?