Csharp/C#教程:属性不会被序列化到.designer.cs文件中分享


属性不会被序列化到.designer.cs文件中

在VS2010中,尽管具有DesignerSerializationVisibility.Visible / Content的ShouldSerializeFoo方法,控件属性也不会被序列化。

这是代码:

class Class1 : UserControl { [Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public string Foo { get; set; } public bool ShouldSerializeFoo() { return true; } public Class1() { Foo = "dupa"; } } 

但是,设计器不会为此属性生成任何内容:

  // // class11 // this.class11.Location = new System.Drawing.Point(224, 262); this.class11.Name = "class11"; this.class11.Size = new System.Drawing.Size(150, 150); this.class11.TabIndex = 2; this.class11.Load += new System.EventHandler(this.class11_Load); 

你正在混合序列化方案。 设计器序列化( DesignerSerializationVisibility的用途)与实例序列化机制无关(这是ShouldSerializeXXX在许多其他方面的function处理)。

DesignerSerializationVisibility.Contentstring (或任何其他不可变类型)没有多大意义。 设计人员可以将属性的序列化视为三种类型:

默认情况下,属性被视为Visible 。 我意识到我对Content定义可能有点令人困惑。 我的意思是这样的:

 public class MyControl : Control { public class SomeOptions { public string Option1 { get; set; } public string Option2 { get; set; } } [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public SomeOptions Options { get; private set; } public string Foo { get; set; } } 

现在,当这个类由设计器序列化时,它看起来像这样:

 // myControl1 this.myControl1.Foo = "value"; this.myControl1.Options.Option1 = "option1"; this.myControl1.Options.Option2 = "option2"; 

这应该更有意义; 将属性标记为Content表示,而不是序列化属性的实际值 (在这种情况下,它将是SomeOptions的实例),它应该序列化该值的属性值。

所以,回到你的问题,这就是为什么你不希望Contentstring属性。 因为string s是不可变的,所以设计器没有任何序列化。 将其标记为Visible或完全保留属性(因为这是默认值)。

虽然可以向设计者提供关于是否要序列化特定属性的自定义方向,但这是一个非常复杂(和讨厌)的过程。 但是, 简单的方法是在属性上使用DefaultValue属性。 如果属性是否应该序列化可以通过将其值与常量进行比较来确定(换句话说,它不依赖于运行时的任何其他内容,如另一个属性的值),您可以像这样装饰属性:

 [DefaultValue("foo")] public string Foo { get; set; } 

如果设计者然后看到Foo的值等于"foo" ,那么它根本不会序列化该属性。

上述就是C#学习教程:属性不会被序列化到.designer.cs文件中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998396.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐