2017-03-15 44 views
1

我試圖使用現有的設置文件作爲ConfigurationProvider。然後,我需要解析下面的XML:自定義配置提供者 - 在dotnet核心解析xml

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

我有truble理解如何映射此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

你的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" />

btw您可以使用: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; } 
} 
+0

謝謝,很好的工具! – Larsi