2017-03-15 1 views
1

J'essaie d'utiliser un fichier de paramètres existant en tant que ConfigurationProvider. Ensuite, je dois analyser le code XML suivant:ConfigurationProvider personnalisée - Analyser xml dans le cœur dotnet

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

Je vais avoir la compréhension truble comment mapper ce xml à une classe. Voilà ce que j'ai essayé:

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

et avons essayé de le lire comme ci-dessous:

XmlSerializer ser = new XmlSerializer(typeof(Parameters)); 
FileStream myFileStream = new FileStream(_root+"/SetParameters-Development.xml", FileMode.Open); 
var needThisArray = ((Parameters)ser.Deserialize(myFileStream)).parameters; 

Merci pour toute aide

Larsi

Répondre

0

Votre xml est invalide et donc il ne peut pas être désérialisé:

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

mais devrait être: <setParameter name="param2" value="val2" />

Vous pouvez utiliser: http://xmltocsharp.azurewebsites.net/ pour générer des classes C# valides pour vous en fonction de votre xml.

Quand je des guillemets anglais il me crée le modèle suivant je peux utiliser pour désérialiser:

[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

Remerciez, outil de Nice! – Larsi