2010-02-12 9 views
10

Ho il codice seguente:Does Order Matter in XML Read da 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); 
    } 
} 

Nel caso 1, proprietà FullName non viene deserializzato, ma nel caso in cui esso viene deserializzato 2 correttamente. Perché?

risposta

9

Perché l'ordine è significativo. L'ordine alfabetico viene utilizzato a meno che non si specifichi l'ordine negli attributi DataMember.

Questo è spiegato in this MSDN article.

In generale, si tratta di una buona pratica di specificare sempre in modo esplicito ordine sul tuo DataMember attributi:

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

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