2010-07-29 97 views
2

我需要的屬性設置默認值,但我不能做這樣的:因爲我需要序列化這個類設置默認值的屬性,使之可序列化

private int prop = 1; 

public Prop 
{ 
    get { return prop;} ... 
} 

,如果我這樣做,我失去了默認值。

您是否知道在序列化之後以及之前向該屬性添加屬性的任何解決方案?

我正在與框架3.5的C#工作。

+1

你有一個setter嗎? – NickAldwin 2010-07-29 19:33:23

回答

5

DefaultValueAttribute

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

你可以讀了很多關於系列化這裏:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

+0

DefaultValue屬性是告訴屬性頁面是一個屬性預期的默認值,也許我的問題是錯誤的,我需要設置「初始值」並在序列化後保留這個值。 在你的示例代碼中,如果我詢問Prop的值,我會得到string.Empty,而不是「SomeValue」。 – 2010-07-29 19:42:33

+0

我誤解了你的問題。改爲看一下OnSerializingAttribute。 – 2010-07-29 19:47:47

+0

是的,我想我需要使用OnSerializationAttribute,謝謝 – 2010-07-29 20:22:45

0

還有:

''' <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

+0

我不能使用自定義序列化器。這個想法是創建一個包含約束和其他事物信息的實體類。例如, 。我需要創建一個名爲「Person」的實體類,並帶有「name」屬性。而在另一個屬性(例如name_MaxLength「,我想指定」名稱「屬性的最大長度並將此屬性用於UI,bussines規則,驗證器,動態創建存儲過程......但是,當我使用這個實體與webservices我放鬆了初始值,因爲我只有實體類的模式,我沒有實現。 – 2010-07-29 19:56:50