2014-11-24 2 views
0

Я использовал этот Xml Deserialization with complex elements in c# в качестве ссылки. Я заметил, что существует много потоков об Deserializing xml, но они не упоминают, когда у тега есть несколько значений внутри него.Deserialize XML с несколькими значениями

Я пытаюсь десериализовать свой xml для lvl3 в массив объектов.

Я получаю сообщение об ошибке «ошибка в документе xml document (1, 2)».

У меня есть XML-строка, я дистанционно по запросу HTTP GET, отформатированный как это:

<xml ...> 
    <lvl1 id="xxx" name="yyy"> 
     <lvl2 id="aaa" name="bbb"> 
     <lvl3 id="mmm" name="nnn" val1="ppp" val2="qqq"> 
      <lvl4a x="000" y="000" z="000" />    
      <lvl4b a="000" b="000" c="000" /> 
      <lvl4c l="000" w="000" h="000" /> 
      ... 
     </lvl3> 
     </lvl2> 
    </lvl1> 
</xml> 

У меня есть следующий код, который продолжает бросать исключение:

"An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll"

исключение брошено этой линии:

temp = (Test)new XmlSerializer(typeof(Test)).Deserialize(rdr);

Но я не уверен, как это сделать, чтобы отладить его, чтобы найти ошибку. Вот полный код:

XmlDocument xmldoc = new XmlDocument(); 
    xmldoc.LoadXml(xmlstring); 

    XmlNodeList list = xmldoc.GetElementsByTagName("lvl2"); 
    for (int i = 0; i < list.Count; i++) 
    { 
     Test temp = new Test(); 
     using (XmlReader rdr = XmlReader.Create(new StringReader(list[i].InnerXml))) 
     { 
      temp = (Test)new XmlSerializer(typeof(Test)).Deserialize(rdr); // exception thrown here 
     } 
     Console.WriteLine(temp.id); 
     Console.WriteLine(temp.overall.x); 
    } 

    [XmlRoot("lvl3")] 
    public class Test{ 
     [XmlAttribute("id")] 
     public string id { get; set; } 

     [XmlAttribute("name")] 
     public string name { get; set; } 

     [XmlElement(ElementName = "lvl4a")] 
     public Overall overall { get;set; } 
    } 

    public class Overall 
    { 
     [XmlAttribute("x")] 
     public string x { get; set; } 

     [XmlAttribute("y")] 
     public string y { get;set; } 

     [XmlAttribute("z")] 
     public string z { get;set; } 
    } 
+1

Вы отлаживали и проверяли, где происходит исключение, и если существует внутреннее исключение? –

+0

Я сделал, не было внутреннего исключения – Kmat

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

0

Либо исправить Test класс включает общие свойства для val1 и val2 атрибутов или удалить их из XML. Схема xml должна соответствовать структуре класса.

Смежные вопросы