2010-05-24 19 views
7

Por ejemplo, tengo clase para serializaratributos obligatorios en la serialización XML

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

Necesito hacer atributo Nombre es obligatorio. ¿Cómo hacer esto en .NET?

+0

¿Qué quiere decir? ¿Qué es exactamente lo que quieres que suceda? – SLaks

Respuesta

4

En primer lugar, el Serializador XML no utiliza [Serializable].

En segundo lugar, no hay forma de hacerlo necesario.

-2

Creo que está confundiendo XML con un XSD. Si desea que su propiedad siempre tenga un valor, inicialice esta propiedad en el constructor y genere una excepción si alguien intenta configurarla como vacía o nula.

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 clase de persona no es serializable en XML porque no tiene un constructor público sin parámetros. Arregle eso y eliminaré el downvote. –

+0

Esto no funcionará. Tal constructor nunca se usará con la serialización, por lo que tampoco se llamará al generador de nombres. – darja

3

Puede usar el XmlIgnoreAttribute junto con el patrón <FieldName>Specified para lanzar una excepción si la propiedad se deja en blanco o es nula. Durante la serialización, se comprobará la propiedad NameSpecified para determinar si el campo se debe representar, de modo que si las propiedades Name dejan nulo o vacío, se lanza una excepción.

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

       return true; 
      } 
    } 
} 
+0

Esta debería ser la respuesta aceptada. – ajawad987

0

Puede utilizar esta:

[XmlElement(IsNullable = false)] 
Cuestiones relacionadas