Using C# .Net 4 -- XML Sample (Real sample has 6 attributes)
<TestXML> <TestElement attr1="MyAttr" attr2="1" DateAdded="">25</TestElement> </TestXML> For my class definition I have the following:
public class TestXML() { public TestXML() {} public int TestElement {get; set;} [XmlAttribute] public string attr1 {get; set;} [XmlAttribute] public string attr2 {get; set;} [XmlIgnore] public DateTime DateAdded {get; set;} [XmlAttribute("DateAdded")] public string dateadded { get{ return (DateAdded == null ? "" : DateAdded.ToString();} set{ if(!value.Equals("")) DateAdded = DateTime.Parse(value);} } } Now the code to deserialize:
string xml = "<TestXML><TestElement attr1=\"MyAttr\" attr2=\"1\" DateAdded=\"\">26</TestElement></TestXML>" using (StringReader sr = new StringReader(xml)) { XmlSerializer serializer = new XmlSerializer(typeof(TestXML)); TestXML myxml = (TestXML)serializer.Deserialize(sr); } Now the result we get is(viewing object in VS):
myxml attr1 | null attr2 | null TestElement | 25 At a complete loss as to why the attributes will not deserialize.
To do that you need two levels:
[XmlRoot("TestXML")] public class TestXml { [XmlElement("TestElement")] public TestElement TestElement { get; set; } } public class TestElement { [XmlText] public int Value {get;set;} [XmlAttribute] public string attr1 {get;set;} [XmlAttribute] public string attr2 {get;set;} } Note that the > 26 < may cause problems too (whitespace); you may need that to be a string instead of an int.
You are defining the attributes on TestElement while they should be on TestXML. Example:
@"<TestXML attr1=""MyAttr"" attr2=""1""> <TestElement>26</TestElement> </TestXML>"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With