I have the following C# classes.
[XmlRoot(Namespace = "http://sameplens.com", ElementName = "dataElement")]
public class SampleClass
{
[XmlElement(ElementName = "inner")]
public List<SampleInnerClass> Inner { get; set; }
[XmlElement(ElementName = "outerfield1")]
public string OuterField1 { get; set; }
[XmlElement(ElementName = "outerfield2")]
public string OuterField2 { get; set; }
}
and
public class SampleInnerClass
{
[XmlElement(ElementName = "innerfield1")]
public string InnerField1 { get; set; }
[XmlElement(ElementName = "innerfield2")]
public string InnerField2 { get; set; }
}
The XML I'm trying to deserialize looks like this:
<ns2:dataElement xmlns:ns2="http://sameplens.com">
<inner>
<innerfield1>a1</innerfield1>
<innerfield2>a2</innerfield2>
</inner>
<inner>
<innerfield1>a3</innerfield1>
<innerfield2>a4</innerfield2>
</inner>
<outerfield1>a</outerfield1>
<outerfield2>b</outerfield2>
</ns2:dataElement>
I have created a generic method for extracting the data:
public T ExtractDataFromResponse<T>(string responseString)
{
T responseObject;
XmlSerializer responseSerializer = new XmlSerializer(typeof(T));
using (StringReader responseReader = new StringReader(responseString))
{
responseObject = (T)responseSerializer.Deserialize(responseReader);
return responseObject;
}
}
What I am getting back is a SampleClass type obejct with Inner type List empty, and fields OuterField1 and OuterField2 null. What am I doing wrong? Thank you in advance!
The following code get everything. I child automatically inherits the parent namespace unless otherwise specified. ns2 is only on the root and not on any children.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApp10
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(SampleClass));
SampleClass sample = (SampleClass)serializer.Deserialize(reader);
}
}
[XmlRoot(Namespace = "http://sameplens.com", ElementName = "dataElement")]
public class SampleClass
{
[XmlElement(ElementName = "inner",Namespace = "")]
public List<SampleInnerClass> Inner { get; set; }
[XmlElement(ElementName = "outerfield1", Namespace = "")]
public string OuterField1 { get; set; }
[XmlElement(ElementName = "outerfield2", Namespace = "")]
public string OuterField2 { get; set; }
}
public class SampleInnerClass
{
[XmlElement(ElementName = "innerfield1")]
public string InnerField1 { get; set; }
[XmlElement(ElementName = "innerfield2")]
public string InnerField2 { get; set; }
}
}