DataContractSerializer sensitive to order of XML??
Posted
by e28Makaveli
on Stack Overflow
See other posts from Stack Overflow
or by e28Makaveli
Published on 2009-10-29T16:05:05Z
Indexed on
2010/05/02
11:07 UTC
Read the original article
Hit count: 307
datacontractserializer
I have the following serialized XML:
DataDescriptor
<d5p1:TimePastToInitializeData >
<d5p1:Hours>2</d5p1:Hours>
<d5p1:Minutes>10</d5p1:Minutes>
<d5p1:Seconds>5</d5p1:Seconds>
</d5p1:TimePastToInitializeData>
<d5p1:PollRate >
<d5p1:Hours>2</d5p1:Hours>
<d5p1:Minutes>10</d5p1:Minutes>
<d5p1:Seconds>5</d5p1:Seconds>
</d5p1:PollRate>
</Value>
</KeyValueOfstringanyType>
With this order, the PollRate property is not constructed and the resulting deserialized object has a null value for this field.
If, however, I change the order as follows:
DataDescriptor
<d5p1:PollRate >
<d5p1:Hours>2</d5p1:Hours>
<d5p1:Minutes>10</d5p1:Minutes>
<d5p1:Seconds>5</d5p1:Seconds>
</d5p1:PollRate>
<d5p1:TimePastToInitializeData >
<d5p1:Hours>2</d5p1:Hours>
<d5p1:Minutes>10</d5p1:Minutes>
<d5p1:Seconds>5</d5p1:Seconds> </d5p1:TimePastToInitializeData>
</Value>
</KeyValueOfstringanyType>
both properties PollRate and TimePastToInitializeData are constructed and initialized properly.
public class DataDescriptor
{
RefreshRate pastTime;
[DataMember]
public RefreshRate TimePastToInitializeData
{
get; set;
}
RefreshRate pollRate;
[DataMember]
public RefreshRate PollRate
{
get; set;
}
[OnDeserializing]
void Initialize(StreamingContext c)
{
// should I do this??
}
}
And RefreshRate:
[DataContract( Namespace = "http//www.emssatcom.com/occ600")]
[Serializable]
public class RefreshRate : Observable
{
public RefreshRate()
{ }
int hours;
[DataMember]
public int Hours
{
get; set;
}
int mins;
[DataMember]
public int Minutes
{
get; set;
}
int secs;
[DataMember]
public int Seconds
{
get; set;
}
int ms;
[DataMember]
public int MilliSeconds
{
get; set;
}
}
© Stack Overflow or respective owner