2014-01-08 2 views
0

방금 ​​C#에서 XML 직렬화를 선택했습니다. 그것을 알아내는 과정에서 나는 이상한 것을 발견하고 이유를 알고 싶었습니다. 나는 다음과 같은 코드를 사용하는 경우왜 System.Xml.Serialization 출력 순서가 변경됩니까

,

[Serializable, XmlRoot("ThisIsTheRootName")] 
public class Person 
{ 
    public string FirstName; 
    public string MiddleName; 
    public string LastName; 
    [XmlText] 
    public string Text; 
} 

나는 직렬화 할 때이 출력을 얻을 :

<?xml version="1.0" encoding="IBM437"?> 
<ThisIsTheRootName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <FirstName>firstname</FirstName> 
    <MiddleName>middlename</MiddleName> 
    <LastName>lastname</LastName>This is some text</ThisIsTheRootName> 

모든 요소는 내가 기대 순서에 있습니다.

필드 대신 속성을 사용하도록 전환하면 갑자기 순서가 예상 한 바가 아닙니다. 코드 :

[Serializable, XmlRoot("ThisIsTheRootName")] 
public class Person 
{ 
    public string FirstName; 
    public string MiddleName { get; set; } 
    public string LastName; 
    [XmlText] 
    public string Text; 
} 

출력 :

<?xml version="1.0" encoding="IBM437"?> 
<ThisIsTheRootName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <FirstName>firstname</FirstName> 
    <LastName>lastname</LastName>This is some text<MiddleName>middlename</MiddleName></ThisIsTheRootName> 


왜 순서 변경합니까?이 속성이나 필드를 사용해야합니까? 그게 그렇게 중요한 건가?

Windows 7 64 비트에서 Visual Studio 2010, C#, .NET 4.0 프레임 워크를 사용합니다.

+1

실제 질문에 답하지 않고'[XmlElement (Order = 1)]'을 사용하여 명령을 강제 할 수 있습니다 ... – Filburt

답변

0

기본적으로 XmlSerializer 필드를 먼저 직렬화하고 속성을 직렬화하기 때문입니다. 그러나 XmlElement 속성을 사용하여이 동작을 변경할 수 있으며이 같은 Order 숙박 시설의 :

[Serializable, XmlRoot("ThisIsTheRootName")] 
public class Person 
{ 
    [XmlElement(Order = 1)] 
    public string FirstName; 
    [XmlElement(Order = 2)] 
    public string MiddleName { get; set; } 
    [XmlElement(Order = 3)] 
    public string LastName; 
    [XmlText] 
    public string Text; 
} 

은 또한 당신이이 질문에 대해 살펴 할 수 있습니다 :

  1. .NET Serialization Ordering
  2. Force XML elements to match the class order when serializing
  3. Change the order of elements when serializing XML
관련 문제