2010-02-12 15 views
10

Tengo el siguiente código:Does Order Matter in the XML Read by DataContractSerializer?

[DataContract(Namespace = "")] 
public class User 
{ 
    [DataMember] 
    public string UserName { get; set; } 

    [DataMember] 
    public string FullName { get; set; } 
} 

//Deserialization test 
public void Test() 
{ 

    //CASE 1. 
    //string xml = "<User><UserName>john</UserName>" + 
    //     "<FullName>John Lennon</FullName></User>"; 

    //CASE 2. 
    string xml = "<User><FullName>John Lennon</FullName>" + 
         "<UserName>john</UserName></User>"; 


    byte[] byteArray = Encoding.UTF8.GetBytes(xml); 
    User user = null; 
    using (MemoryStream stream = new MemoryStream(byteArray)) 
    { 
    DataContractSerializer serializer = 
      new DataContractSerializer(typeof(User), "User", ""); 
    user = (User)serializer.ReadObject(stream); 
    } 
} 

En el caso 1, propiedad FullName no se deserializa, pero en el caso 2 se deserializar correctamente. ¿Por qué?

Respuesta

9

Porque el orden es significativo. El orden alfabético se utiliza a menos que especifique el orden en sus atributos DataMember.

Esto se explica en this MSDN article.

En general, es una buena práctica especificar siempre de forma explícita orden en su DataMember atributos:

[DataMember(IsRequired=true, Order=0)] 
public string FullName { get; set; } 

[DataMember(IsRequired=true, Order=1)] 
public string UserName { get; set; }