【发布时间】:2013-08-27 13:54: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,其次因为它在性能方面的成本很高。
我尝试使用OnDeserializing 和OnDeserialized 设置标志,但OnDeserialized 让我知道反序列化何时结束,用OnDeserializing 修饰的方法不是在反序列化之前而是在操作期间调用。
此代码位于可移植类库程序集中,因此我无法使用 SerializationContext。
欢迎提供任何线索/提示!
【问题讨论】:
-
在反序列化之前调用标有 OnDeserializing 的方法是什么意思?您的意思是在实例化对象之后但在设置属性之前调用它们?
标签: c# serialization windows-runtime portable-class-library