为属性设置默认值并使其可序列化
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密码并使其可远程登录的一种配置方式