当前位置: 代码迷 >> .NET组件控件 >> 不解 DesignerSerializationVisibility 枚举
  详细解决方案

不解 DesignerSerializationVisibility 枚举

热度:620   发布时间:2016-05-04 23:31:40.0
疑惑 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 的是需要序列化的, 是否真的序列化, 还要看属性值是否是默认值,
只序列化值为非默认值的的属性.

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