为属性设置默认值并使其可序列化

Posted

技术标签:

【中文标题】为属性设置默认值并使其可序列化【英文标题】:Set a default value to a property and make it serializable 【发布时间】:2011-03-22 22:04:37 【问题描述】:

我需要为属性设置一个默认值,但我不能这样做:

private int prop = 1;

public Prop

     get  return prop; ...

因为我需要序列化这个类,如果我这样做,我会失去默认值。

您是否知道在序列化之后和之前向属性添加属性的任何解决方案?

我正在使用带有框架 3.5 的 c#。

【问题讨论】:

【参考方案1】:

DefaultValueAttribute

[DefaultValue("SomeValue")]
public string Prop  get; set; 

你可以在这里阅读很多关于序列化的内容:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

【讨论】:

DefaultValue 属性是告诉属性页这是一个属性所期望的默认值,也许我的问题是错误的,我需要设置“初始值”并在序列化后保留这个值.在您的示例代码中,如果我询问 Prop 的值,我会得到 string.Empty,而不是“SomeValue”。 我误解了你的问题。改为查看 OnSerializingAttribute。 是的,我想我需要使用 OnSerializationAttribute,谢谢【参考方案2】:

还有:

    ''' <summary>
    ''' The defaults size for the list item.
    ''' </summary>
''' <value>Size.</value>
''' <returns>Size.</returns>
''' <remarks></remarks>
<Category("Appearance")> _
<Description("The defaults size for the list item.")> _
  Public Property DefaultItemSize() As Size Implements IVisualList.DefaultItemSize
    Get
        Return m_DefaultItemSize
    End Get
    Set(ByVal value As Size)
        m_DefaultItemSize = value
    End Set
End Property

Protected Overridable Function ShouldSerializeDefaultItemSize() As Boolean
    If m_DefaultItemSize.Equals(New Size(100, m_CellHeight)) Then Return False
    Return True
End Function

另一种选择可能是使用这些属性:

[OnSerializing()]

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.onserializingattribute.aspx

[OnDeserializing()]

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.ondeserializingattribute.aspx

【讨论】:

我不能使用自定义序列化器。这个想法是创建一个实体类,其中包含有关约束和其他内容的信息。例如。我需要创建一个名为“Person”的实体类,并带有一个“name”属性。在另一个属性上(例如 name_MaxLength”,我想为“name”属性指定最大长度并将此属性用于 UI、业务规则、验证器、存储过程的动态创建......但是,当我使用这个带有网络服务的实体我失去了初始值,因为我只有实体类的架构,我没有实现。

以上是关于为属性设置默认值并使其可序列化的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu18.04 (腾讯云服务器)安装MySQL 5.7,更改MySQL的root密码并使其可远程登录的一种配置方式

Ubuntu18.04 (腾讯云服务器)安装MySQL 5.7,更改MySQL的root密码并使其可远程登录的一种配置方式

Ubuntu18.04 (腾讯云服务器)安装MySQL 5.7,更改MySQL的root密码并使其可远程登录的一种配置方式

从mysql中提取链接并使其可点击?

填充数组并使其可使用 Angular Material 过滤

Groovy:如何定义带有参数的 java callable 并使其可用于 groovy shell?