0

假设我有这门课:

[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在反序列化期间引发事件,其次因为它在性能方面的成本很高。

我尝试使用OnDeserializingandOnDeserialized来设置一个标志,但是虽然OnDeserialized让我知道反序列化何时结束,但用修饰的方法OnDeserializing不是在反序列化之前而是在操作期间调用。

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

欢迎任何线索/提示!

4

1 回答 1

1

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

于 2013-08-27T14:06:36.410 回答