나는 데이터 계약을 다음 있습니다 :왜 DataContractSerializer는 알파벳순으로 정렬 된 XML이 필요합니까?
namespace Wcf.Contracts.Data
{
[DataContract]
public class Presence
{
[DataMember]
public int Id { get; set; }
[DataMember]
public DateTime? From { get; set; }
[DataMember]
public DateTime? To { get; set; }
[DataMember]
public TimeSpan? BreakPeriod { get; set; }
}
}
XML에 Presence
의 인스턴스를 직렬화 잘 Presence
작품의 인스턴스로 다시 같은 XML을 역 직렬화. 그러나 직렬화 된 Presence
객체를 나타내는 문자열 변수를 비 직렬화하면 이상한 행동을하게됩니다. 일부 속성은 XML에서 지정된 값보다는 기본값을가집니다. 나는 Presence
의 속성을 나타내는 XML 요소가 사전 순으로 정렬되어야한다는 것을 알게되었습니다.
var dcs = new System.Runtime.Serialization.DataContractSerializer(typeof(Wcf.Contracts.Data.Presence));
var xml1 = @"<?xml version=""1.0"" encoding=""utf-16""?>
<Presence xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/Wcf.Contracts.Data"">
<BreakPeriod>PT30M</BreakPeriod>
<From>2013-08-21T10:00:00Z</From>
<To>2013-08-21T15:00:00Z</To>
<Id>85</Id>
</Presence>";
var xr1 = System.Xml.XmlReader.Create(new System.IO.StringReader(xml1));
var p1 = dcs.ReadObject(xr1) as Wcf.Contracts.Data.Presence;
var xml2 = @"<?xml version=""1.0"" encoding=""utf-16""?>
<Presence xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/Wcf.Contracts.Data"">
<Id>85</Id>
<From>2013-08-21T10:00:00Z</From>
<To>2013-08-21T15:00:00Z</To>
<BreakPeriod>PT30M</BreakPeriod>
</Presence>";
var xr2 = System.Xml.XmlReader.Create(new System.IO.StringReader(xml2));
var p2 = dcs.ReadObject(xr2) as Wcf.Contracts.Data.Presence;
var xml3 = @"<?xml version=""1.0"" encoding=""utf-16""?>
<Presence xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/Wcf.Contracts.Data"">
<BreakPeriod>PT30M</BreakPeriod>
<From>2013-08-21T10:00:00Z</From>
<Id>85</Id>
<To>2013-08-21T15:00:00Z</To>
</Presence>";
var xr3 = System.Xml.XmlReader.Create(new System.IO.StringReader(xml3));
var p3 = dcs.ReadObject(xr3) as Wcf.Contracts.Data.Presence;
세 개의 인스턴스 코드
의이 조각에서 예를 들어는 모두 다르다.
| p1 | p2 | p3
Id | default(int) (=0) | 85 | 85
From | 8/21/2013 10:00:00 AM | default(DateTime?) (=null) | 8/21/2013 10:00:00 AM
To | 8/21/2013 3:00:00 PM | 8/21/2013 3:00:00 PM | 8/21/2013 3:00:00 PM
BreakPeriod | 00:30:00 | default(TimeSpan?) (=null) | 00:30:00
왜 XML의 요소를 정렬해야합니까? 아무도 왜
DataContractSerializer
그렇지 않으면 올바르게 deserialize하지 않는지 알고 있습니까?
+1 예를 게시하십시오. – Sphinxxx
[DataContractSerializer를 사용하여 XML 비 직렬화] 가능한 복제본 (http://stackoverflow.com/questions/15413468/deserializing-xml-with-datacontractserializer) – chwarr