2010-05-24 26 views
7

Per esempio io ho classe per serializzareattributi obbligatori di serializzazione XML

[Serializable] 
class Person 
{ 
    [XmlAttribute("name")] 
    string Name {get;set;} 
} 

ho bisogno di fare attributo Name richiesto. Come farlo in .NET?

+0

Cosa vuoi dire? Cosa vuoi esattamente che succeda? – SLaks

risposta

4

Prima di tutto, [Serializable] non viene utilizzato dal serializzatore XML.

Secondo, non c'è modo di renderlo necessario.

-2

Credo che tu stia confondendo XML con un XSD. Se si desidera che la proprietà abbia sempre un valore, inizializzare questa proprietà nel costruttore e generare un'eccezione se qualcuno tenta di impostarlo su vuoto o nullo.

class Person 
{ 

    private string _Name = "Not Initialized"; 
    [XmlAttribute("name")] 
    string Name { 
    get { return _Name;} 
    set { 
     if(value == null || value==string.Empty) throw new ArgumentException(...); 

     _Name = value; 
    } 
    } 
} 
+0

-1: la classe persona non è serializzabile in XML perché non ha un costruttore pubblico senza parametri. Correggilo e rimuoverò il downvote. –

+0

Questo non funzionerà. Tale costruttore non verrà mai utilizzato con la serializzazione, quindi anche il name setter non verrà chiamato. – darja

3

È possibile utilizzare lo XmlIgnoreAttribute insieme al modello <FieldName>Specified per generare un'eccezione se la proprietà viene lasciata vuota o nulla. Durante la serializzazione verrà verificata la proprietà NameSpecified per determinare se il campo debba essere sottoposto a rendering, quindi se le proprietà Name lasciate nulle o vuote vengono lanciate delle eccezioni.

class Person 
{ 
    [XmlElement("name")] 
    string Name { get; set; } 
    [XmlIgnore] 
    bool NameSpecified 
    { 
     get { 
       if(String.IsNullOrEmpty(Name)) throw new AgrumentException(...); 

       return true; 
      } 
    } 
} 
+0

Questa dovrebbe essere la risposta accettata. – ajawad987

0

È possibile utilizzare questo:

[XmlElement(IsNullable = false)] 
Problemi correlati