Ich habe die folgende XML deserialisieren, die ich wie folgt deserialisieren ich versucht, aber ich Fehler:Es konnte keine XML-String
There was an error reflecting type 'System.Collections.Generic.List`1[MyApp.Models.Field]
Unten ist mein Code
public class FieldList
{
[XmlArray("fields")]
[XmlArrayItem("field")]
List<Field> Fields { get; set; }
}
public class Field
{
[XmlAttribute("type")]
public string Type { get; set; }
[XmlAttribute("required")]
public bool Required { get; set; }
[XmlAttribute("label")]
public string Label { get; set; }
[XmlAttribute("name")]
public string Name { get; set; }
[XmlElement("option")]
[JsonProperty("values")]
public List<Option> Options { get; set; }
}
public class Option
{
[XmlAttribute("label")]
public string Label { get; set; }
[XmlAttribute("value")]
public string Value { get; set; }
[XmlAttribute("selected")]
public bool Selected { get; set; }
/// <remarks/>
[XmlIgnore()]
public bool SelectedSpecified { get; set; }
[XmlText]
public string Text { get; set; }
}
var xml = @"<?xml version=""1.0"" ?>
<form-template>
<fields>
<field type=""select"" required=""true"" label=""Cars"" name=""cars"" >
<option label=""Toyota"" value=""Toyota"" selected=""true"">Toyota</option>
<option label=""Nisan"" value=""Nisan"" >Nisan</option>
</field>
</fields>
</form-template>";
var serializer = new XmlSerializer(typeof(FieldList), new XmlRootAttribute("form-template"));
var stringReader = new StringReader(xml);
var xmlFields = (FieldList)serializer.Deserialize(stringReader);
Was soll ich tun falsch?
* UPDATE *
Wie pro Kommentare unter wechselnden
public IEnumerable<Option> Options { get; set; }
Um
public List<Option> Options { get; set; }
behebt den Fehler, aber jetzt ist nichts deserialisiert - die Variable xmlFields
ist leer ??? Muss ich von einem bestimmten Knoten lesen oder ist das egal?
Die 'InnerException' einen Hinweis enthalten sollte. –
@ManfreedRadlwimmer 'IEnumerable ändern ' zu 'Liste ' behebt den Fehler, aber nichts wird deserialisiert - 'xmlFields' ist leer? – adam78
Meine beste Vermutung ist, dass, weil folgende Eigenschaft eine Schnittstelle ist öffentliche IEnumerable Optionen {get; einstellen; } und Deserializer weiß nicht, wie die Instanz zu erstellen, die es funktionieren sollte, wenn Sie List verwenden Optionen {get; set;} – Gurpreet