2010-07-29 2 views
2

Мне нужно установить значение по умолчанию для свойства, но я не могу сделать это так:Установите значение по умолчанию свойства и сделать его сериализация

private int prop = 1; 

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

Потому что мне нужно сериализовать этот класс, и если я это сделаю, я потеряю значение по умолчанию.

Вы знаете какое-либо решение, которое работает после сериализации и раньше, добавляя атрибут свойства?

Я работаю с C# с каркасом 3.5.

+1

У вас есть сеттер тоже? – NickAldwin

ответ

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». –

+0

Я неправильно понял ваш вопрос. Вместо этого взгляните на OnSerializingAttribute. –

+0

Да, мне кажется, мне нужно использовать OnSerializationAttribute, спасибо –

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

Я не могу использовать пользовательские сериализаторы. Идея состоит в том, чтобы создать класс Entity, который включает информацию о ограничениях и других вещах. Например. Мне нужно создать класс сущности с именем «Лицо» с свойством «имя». И в другом свойстве (например, name_MaxLength), и я хочу указать максимальную длину для свойства «name» и использовать это свойство в пользовательском интерфейсе, правилах бизнеса, валидаторах, динамическом создании процедур хранения ... Но когда я использую этот объект с webservices я теряю начальное значение, потому что у меня есть только scheema класса сущности, у меня нет реализации. –

Смежные вопросы