I'm trying to use an existing settings file as a ConfigurationProvider. Then I need to parse the following xml:
<?xml version="1.0" encoding="utf-8"?>
<parameters>
<setParameter name="param1" value="val1" />
<setParameter name="param2" value="val2 />
</parameters>
I'm having truble understanding how to map this xml to a class. This is what I've tried:
[XmlRoot(elementName:"parameters")]
public class Parameters
{
[XmlArray]
public List<setParameter> parameters { get; set; }
}
[XmlRoot]
public class setParameter
{
[XmlAnyAttribute]
public string name { get; set; }
[XmlAnyAttribute]
public string value { get; set; }
}
And tried reading it as below:
XmlSerializer ser = new XmlSerializer(typeof(Parameters));
FileStream myFileStream = new FileStream(_root+"/SetParameters-Development.xml", FileMode.Open);
var needThisArray = ((Parameters)ser.Deserialize(myFileStream)).parameters;
Thanks for any help
Larsi
Your xml is invalid and thus it cannot be deserialized:
<?xml version="1.0" encoding="utf-8"?>
<parameters>
<setParameter name="param1" value="val1" />
<setParameter name="param2" value="val2 /> //missing double quote " here
</parameters>
but should be: <setParameter name="param2" value="val2" />
btw you can use: http://xmltocsharp.azurewebsites.net/ to generate valid C# classes for you based on your xml.
When i add the quotes it creates me the following model i can use to deserialize:
[XmlRoot(ElementName="setParameter")]
public class SetParameter {
[XmlAttribute(AttributeName="name")]
public string Name { get; set; }
[XmlAttribute(AttributeName="value")]
public string Value { get; set; }
}
[XmlRoot(ElementName="parameters")]
public class Parameters {
[XmlElement(ElementName="setParameter")]
public List<SetParameter> SetParameter { get; set; }
}