反序列化时不要引发OnPropertyChanged

时间:2013-08-27 13:54:07

标签: c# serialization windows-runtime portable-class-library

假设我有这门课程:

[XmlType]
public class TestModel : BindableBase
{
    private int _id;

    [XmlElement(Order = 7)]
    public int Id
    {
        get
        {
            return _id;
        }
        set
        {
            SetProperty(ref _id, value);
        }
    }
}

我正在进行大量的序列化和反序列化(从/到Json使用newtonsoft和从/到带有protobuf的字节数组)我希望在反序列化期间设置属性时避免调用SetProperty方法。

基本上我想有一些东西:

[XmlElement(Order = 7)]
public int Id
{
    get
    {
        return _id;
    }
    set
    {
        if(!serializing) 
            SetProperty(ref _id, value);
        else
            _id = value;
    }
}

我想这样做的原因是,首先我不需要在反序列化期间引发事件OnPropertyChanged,其次因为它在性能方面成本很高。

我尝试使用OnDeserializingOnDeserialized设置标记,但OnDeserialized让我知道反序列化结束时,用OnDeserializing修饰的方法不会被调用在反序列化之前但在操作期间。

此代码位于可移植类库程序集中,因此我无法使用SerializationContext

欢迎提供任何线索/提示!

1 个答案:

答案 0 :(得分:1)

我想到的最简单的事情是在代码中使用参数化构造函数,它将“serializing”标志设置为false,并在无参数构造函数中将“serializing”标志设置为true。您可以使用不使用无参数构造函数的Factory,而不是第一个,但会在创建后适当地设置标志。