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

时间:2013-07-17 21:29:07

标签: c# xml serialization casting

我有一个类似于UInt16的类。因此,我没有使用:UInt16 myProp,而是使用Address 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() { }
}

然后我有一个属性:     public Address myAddress {get;组; }

其余代码完美无缺。

此类需要序列化并反序列化为xml。

序列化后,我的xml

<myAddress>
  <address>7</address>
</myAddress>

但是在我清除了xml文件之后,我无法将myAddress属性恢复为7。

也许是一个奇怪的问题......任何想法?

1 个答案:

答案 0 :(得分:2)

您的转化运算符返回UInt16已损坏 - 它使用静态变量,该变量将根据最近构建的值进行设置。您是否认为忽略传递给转换运算符的值并不奇怪?

目前尚不清楚为什么你会得到静态变量,但我强烈怀疑你应该摆脱它,你的转换操作符应该是:

public static implicit operator UInt16(Address address)
{
    return address.address;
}

您还应该重命名该属性以遵循.NET命名约定...并且最好还是更改名称,因为Address类型也有Address 属性< / em>的。这种类型无论如何都不清楚是什么意思,但也许Value至少会稍好一些?