Custom ConfigurationProvider - 在dotnet核心中解析xml

时间:2017-03-15 15:25:26

标签: configuration asp.net-core .net-core xmlserializer

我尝试将现有设置文件用作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

1 个答案:

答案 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; }
}