我尝试将现有设置文件用作ConfigurationProvider。然后我需要解析以下xml:
<?xml version="1.0" encoding="utf-8"?>
<parameters>
<setParameter name="param1" value="val1" />
<setParameter name="param2" value="val2 />
</parameters>
我完全理解如何将这个xml映射到一个类。这就是我尝试过的:
[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; }
}
尝试阅读如下:
XmlSerializer ser = new XmlSerializer(typeof(Parameters));
FileStream myFileStream = new FileStream(_root+"/SetParameters-Development.xml", FileMode.Open);
var needThisArray = ((Parameters)ser.Deserialize(myFileStream)).parameters;
感谢您的帮助
Larsi
答案 0 :(得分:0)
您的xml无效,因此无法反序列化:
<?xml version="1.0" encoding="utf-8"?>
<parameters>
<setParameter name="param1" value="val1" />
<setParameter name="param2" value="val2 /> //missing double quote " here
</parameters>
但应该是:<setParameter name="param2" value="val2" />
顺便说一句,您可以使用:http://xmltocsharp.azurewebsites.net/根据您的xml为您生成有效的C#类。
当我添加引号时,它会创建我可以用来反序列化的以下模型:
[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; }
}