自定义 ConfigurationProvider - 在 dotnet 核心中解析 xml

Custom ConfigurationProvider - Parse xml in dotnet core

我正在尝试使用现有的设置文件作为 ConfigurationProvider。然后我需要解析以下 xml:

<?xml version="1.0" encoding="utf-8"?>
<parameters>
   <setParameter name="param1" value="val1" />
   <setParameter name="param2" value="val2  />  
</parameters>

我很难理解如何将此 xml 映射到 class。这是我试过的:

[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;

感谢您的帮助

拉尔西

您的 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; }
}