2010-07-29 1 views
2

Je dois définir une valeur par défaut pour une propriété, mais je ne peux pas le faire comme ceci:Définir une valeur par défaut à une propriété et de le rendre sérialisable

private int prop = 1; 

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

Parce que je dois sérialisation cette classe, et si je le fais, je perds la valeur par défaut.

Connaissez-vous une solution qui fonctionne après la sérialisation et avant, en ajoutant un attribut à la propriété?

Je travaille avec C# avec framework 3.5.

+1

Avez-vous un compositeur aussi? – NickAldwin

Répondre

5

DefaultValueAttribute

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

Vous pouvez lire beaucoup de choses sur sérialisation ici: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

+0

l'attribut DefaultValue est de dire aux pages de propriétés qui est la valeur par défaut attendue pour une propriété, peut-être que ma question est fausse, je dois définir la "Valeur initiale" et persister cette valeur après la sérialisation. Dans votre exemple de code, si je demande la valeur de Prop, je deviens string.Empty, pas "SomeValue". –

+0

J'ai mal compris votre question. Jetez un coup d'oeil à l'OnSerializingAttribute à la place. –

+0

Oui, je pense que je dois utiliser le OnSerializationAttribute, merci –

0

Il y a aussi:

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

ou

Une autre option peut être d'utiliser ces attributs :

[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

Je ne peux pas utiliser les sérialiseurs personnalisés. L'idée est de créer une classe Entity qui inclut des informations sur les contraintes et d'autres choses. Par exemple. J'ai besoin de créer une classe d'entité nommée "Person", avec une propriété "name". Et sur une autre propriété (par exemple name_MaxLength "et je veux spécifier la longueur maximale pour la propriété" name "et utiliser cette propriété dans l'interface utilisateur, les règles bussines, les validateurs, la création dynamique des procédures de magasin ... Mais, quand j'utilise cette entité avec webservices je perds la valeur initiale, parce que je n'ai que le scheema de la classe d'entité, je n'ai pas la mise en œuvre. –

Questions connexes