读书人

不解 DesignerSerializationVisibilit

发布时间: 2013-06-19 10:26:41 作者: rapoo

疑惑 DesignerSerializationVisibility 枚举
对这个DesignerSerializationVisibility感到很疑惑。
官方解释是这样的:指定属性对设计时序列化程序所具有的可见性。
没有 DesignerSerializationVisibilityAttribute 的成员将被视为具有值为 Visible 的DesignerSerializationVisibilityAttribute。
如果可能,序列化程序会将标记为 Visible 的属性 (Property) 值序列化为该类型。要为特定类型或属性 (Property) 指定自定义序列化,请使用 DesignerSerializerAttribute。



成员名称 说明
Hidden 代码生成器不生成对象的代码。
Visible 代码生成器生成对象的代码。
Content 代码生成器产生对象内容的代码,而不是对象本身的代码。

疑惑:
(1)Hidden 代码生成器不生成“对象的代码”?本身就是属性,生成什么对象的代码
(2)Visible 代码生成器生成"对象的代码"?本身就是属性,生成什么对象的代码
(3)Content 代码生成器产生"对象内容的代码",而不是"对象本身的代码"?
(4)要为特定类型或属性 (Property) 指定自定义序列化,请使用 DesignerSerializerAttribute?

[解决办法]
如果
有些属性在设计时赋值没有意义(某属性是计算而来, 运行时特定, 等等, 总有理由),

那么,
Hidden 则不会序列化, 对应到 code dom 序列化器, 就是不在 *.Desinger.cs 中生成这个属性的赋值语句.

Visible 的是需要序列化的, 是否真的序列化, 还要看属性值是否是默认值,
只序列化值为非默认值的的属性.

引用
设计时序列化, 目的就是记住当时的状态,
记住的方式不同, 就需要不同的序列化器,

读书人网 >.NET

热点推荐