Don';t在反序列化时引发OnPropertyChanged

本文关键字:OnPropertyChanged 反序列化 Don | 更新日期: 2023-09-27 18:29:07

假设我有这个类:

[XmlType]
public class TestModel : BindableBase
{
    private int _id;
    [XmlElement(Order = 7)]
    public int Id
    {
        get
        {
            return _id;
        }
        set
        {
            SetProperty(ref _id, value);
        }
    }
}

我正在进行大量的序列化和反序列化(使用newtonsoft从/到Json,使用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

欢迎任何线索/提示!

Don';t在反序列化时引发OnPropertyChanged

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

相关文章:
  • 没有找到相关文章