10


4

DataContractSerializerによって読み取られるXMLの順序は重要ですか?

次のようなコードがあります。

[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 = "john" +
  //                    "John Lennon";

  //CASE 2.
  string xml = "John Lennon" +
                      "john";


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

ケース1ではFullNameプロパティは逆シリアル化されませんが、ケース2では適切に逆シリアル化されます。 Why?

1 Answer


9


順序が重要だからです。 DataMember属性で順序を指定しない限り、アルファベット順が使用されます。

これについては、http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.order.aspx [このMSDN記事]で説明されています。

一般的に、DataMember属性でOrderを常に明示的に指定することをお勧めします。

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

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