I have an XML file that I'm trying to serialize into an object. Some elements are being ignored.
My XML File:
<?xml version="1.0" encoding="utf-8" ?>
<License xmlns="http://schemas.datacontract.org/2004/07/MyApp.Domain">
<Guid>7FF07F74-CD5F-4369-8FC7-9BF50274A8E8</Guid>
<Url>http://www.gmail.com</Url>
<ValidKey>true</ValidKey>
<CurrentDate>3/1/2010 9:39:28 PM</CurrentDate>
<RegistrationDate>3/8/2010 9:39:28 PM</RegistrationDate>
<ExpirationDate>3/8/2099 9:39:28 PM</ExpirationDate>
</License>
My class definition:
[DataContract]
public class License
{
[DataMember]
public virtual int Id { get; set; }
[DataMember]
public virtual string Guid { get; set; }
[DataMember]
public virtual string ValidKey { get; set; }
[DataMember]
public virtual string Url { get; set; }
[DataMember]
public virtual string CurrentDate { get; set; }
[DataMember]
public virtual string RegistrationDate { get; set; }
[DataMember]
public virtual string ExpirationDate { get; set; }
}
And my Serialization attempt:
XmlDocument Xmldoc = new XmlDocument();
Xmldoc.Load(string.Format(url));
string xml = Xmldoc.InnerXml;
var serializer = new DataContractSerializer(typeof(License));
var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
License license = (License)serializer.ReadObject(memoryStream);
memoryStream.Close();
The following elements are serialized:
The following elements are not serialized:
Replacing the string dates in the xml file with "blah" doesn't work either. What gives?
DataContractSerializer requires the XML elements representing properties to be in alphabetical order. So, your XML should be:
<?xml version="1.0" encoding="utf-8" ?>
<License xmlns="http://schemas.datacontract.org/2004/07/MyApp.Domain">
<CurrentDate>3/1/2010 9:39:28 PM</CurrentDate>
<ExpirationDate>3/8/2099 9:39:28 PM</ExpirationDate>
<Guid>7FF07F74-CD5F-4369-8FC7-9BF50274A8E8</Guid>
<RegistrationDate>3/8/2010 9:39:28 PM</RegistrationDate>
<Url>http://www.gmail.com</Url>
<ValidKey>true</ValidKey>
</License>
The exception, as John pointed out, is if you are using the Order property on your DataMember attributes. In that case, the XML elements must be in the specified order.