在.Net中更改设计时的属性序列化顺序

时间:2009-10-21 07:43:02

标签: .net vb.net serialization design-time

我有一个课程,在设计时按字母顺序对要素序列化的属性进行中继是有问题的。 换句话说,属性Z必须在属性A之前序列化。

问题出现是因为属性属性Z在它发生变化时清除属性A - 这发生在InitializeComponent中。 我通过设置FirstTime标志来解决这个问题,但这看起来很混乱。

我找到了一个解决方案here (translated from Spanish),但这似乎过度杀人。

处理问题的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

这里的最佳做法是重写您的类,以便所有设计时属性彼此独立。这就是所有Microsoft提供的可设计类型的工作方式。

我之前几次陷入这个陷阱,我总是通过让有趣的相互依赖只在运行时发生而不是设计时来解决它。

答案 1 :(得分:1)

我是“矫枉过正”解决方案的作者。 :-)如果您不喜欢基于CodeDomSerializer的解决方案,我认为您唯一的选择是设计您的类,以便可以按任何顺序初始化属性(无论如何这被认为是好的做法)。例如,如果它是第一次调用它的setter,你可以让属性Z不清除属性A.类似的东西:

bool propertyZHasBeenSet=false;
SomeType propertyZ
{
    get {
        //Property getter
    }

    set {
        if(propertyZHasBeenSet) {
            //Clear property A
        } else {
            propertyZHasBeenSet=true;
        }
        //The remaining of the property setter
    }
}

我确信必须有更好的方法来完成同样的事情,但你明白了。