使用自定义类型强制转换运算符反序列化对象时返回了错误的数据

本文关键字:返回 对象 错误 数据 反序列化 运算符 自定义 类型 转换 | 更新日期: 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至少会稍微好一点?