2013-02-15 112 views
0

我的模型有一系列的setter和getters。一些制定者调用依赖于其他属性的方法。这工作正常,因为当在代码中构造对象时,我控制设置属性的顺序。然而,在序列化/反序列化过程中,我遇到了一个问题,即在实际设置了property1之前,还会调用一个依赖于另一个属性(称为property1)的方法的setter。System.Web.Script.Serialization.JavaScriptSerializer属性反序列化的顺序

当使用System.Web.Script.Serialization.JavaScriptSerializer进行反序列化时,有没有办法控制被调用的属性设置器的顺序?

public class MyClass 
{ 
    public String[] Property1 { get; set; } 

    private String[] _property2; 
    public string[] Property2 
    { 
     get { return _property2; } 
     set { _property2 = value; UpdateSomething(); UpdateSomething(); RaisePropertyChanged("Property2"); } 
    } 

    public void UpdateSomething() 
    { 
     Debug.Assert(Property1.Length == Property2.Length); <!--When deserializing, need Property1 set before property2 to avoid issues 
    } 
} 

感谢

+0

它是一个艰难的避免在这种情况下..唯一的方法来避免这一点,我可以看到是不是使用序列化或创建一个自定义deseerializer(我想避免)。在这种情况下,当一个属性发生变化时,我想要做点什么。如果我使用getter或setter,做这件事,竞赛条件仍然存在。 – mike01010 2013-02-15 15:48:47

回答

0

我去的解决方案是创建一个只我要坚持或恢复领域的按比例缩小的模型持久化。真正的模型有一个重载的构造函数,它接受持久化模型并且可以从它恢复自己,从而允许我更多地控制属性的初始化/设置。

相关问题