对这个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 的是需要序列化的, 是否真的序列化, 还要看属性值是否是默认值,
只序列化值为非默认值的的属性.