自定义 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; }
}
我正在尝试使用现有的设置文件作为 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; }
}