2015-04-21 3 views
1

У меня есть этот XML со многими именами, как список:XmlSerializer WebResponse

<apelidos> 
    <apelido>Casmilo</apelido> 
    <apelido>Castro</apelido> 
</apelidos> 

И Я сделал модель, как это:

namespace IdCel.Model 
{ 
    [XmlTypeAttribute(AnonymousType = true)] 
    public class apelidos 
    { 
     [XmlArray("apelidos")] 
     [XmlArrayItem("apelidos")] 
     public List<apelido> apelidosNomes { get; set; } 

     public apelidos() 
     { 
      apelidosNomes = new List<apelido>(); 
     } 
    } 

    public class apelido 
    { 
     [XmlElement(ElementName = "apelido")] 
     public string apelidoNome { get; set; } 
    } 
} 

И мой XmlSerializer

HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest; 
XmlSerializer ser = new XmlSerializer(objetoLista.GetType()); 

WebResponse response = request.GetResponse(); 
var result = ser.Deserialize(response.GetResponseStream()); 

return result; 

Но он не работает, я делаю тот же код с XML без списка, и он отлично работает

+0

, что это ошибка, которую вы получаете? – Ksv3n

+0

Не имеет ошибки, только не unserializer XML! – user1887732

+0

XmlArrayItem ссылается на «apelidos», разве это не «apelido»? Кроме того, в этом случае ваш apelido класса должен либо поместить XmlText на apelidoNome, либо вы можете использовать список строк вместо специального класса;) – Icepickle

ответ

1

Если вам просто нужно прочитать содержимое тегов apelido, вы будете намного быстрее, когда используете Linq To XML. Например:

var xml = @"<apelidos> 
       <apelido>Casmilo</apelido> 
       <apelido>Castro</apelido> 
      </apelidos>"; 

var doc = XDocument.Parse(xml); 
var apelidos = from apelido in doc.Descendants("apelido") 
       select apelido.Value; 

Это дает вам IEnumerable<string> как результат, содержащий все имена.

EDIT: Для того, чтобы загрузить XML из Интернета вы можете сделать следующее:

HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest; 

WebResponse response = request.GetResponse(); 
var doc = XDocument.Load(response.GetResponseStream()); 
+0

Как я могу получить свой онлайн-XML таким образом? – user1887732

+0

@ user1887732 Я отредактировал мой ответ –

+0

Я сделал это, но мое возвращение не является списком «apelido», не так ли? – user1887732

0

Теперь это сработало! Я сделал это:

[Serializable()] 
public class apelidos 
{ 
    [System.Xml.Serialization.XmlElement("apelido")] 
    public List<string> apelido { get; set; } 
} 

И это:

HttpWebRequest request = WebRequest.Create(uri) 
      as HttpWebRequest; 

     XmlSerializer ser = new XmlSerializer(objetoLista.GetType()); 

     WebResponse response = request.GetResponse(); 
     var result = ser.Deserialize(response.GetResponseStream()); 

     return result; 
Смежные вопросы