2010-02-12 16 views
10

Aşağıdaki kod var: durumunda 1'deXML'de Sipariş Materyali DataContractSerializer Tarafından Okunur mu?

[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); 
    } 
} 

, FullName özelliği serisi kaldırılan değildir, ancak söz 2'de düzgün serisi kaldırılan edilir. Niye ya? Sipariş önemli olduğundan,

cevap

9

. Siparişi DataMember özelliklerinde belirtmediğiniz sürece alfabetik sipariş kullanılır.

Bu, this MSDN article içinde açıklanmaktadır. Genelde

, her zaman açıkça DataMember üzerinde Order belirtmek için iyi bir uygulamadır nitelikleri:

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

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