2015-07-07 2 views
2
private ResultReferences<T> GetList<T>(string result) where T : class 
{ 
    TextReader reader = new StringReader(result); 
    XmlSerializer serializer = new XmlSerializer(typeof(ResultReferences<T>)); 
    ResultReferences<T> response = (ResultReferences<T>)serializer.Deserialize(reader); 
    return response; 
} 

это функция, которая анализирует строку XML:C# XMLSerializer возвращает нуль

и это мой XML-строка:

<?xml version="1.0" encoding="UTF-8"?> 
<result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/some-api/ getCurrencyRate.xsd"> 
    <rates date="2015-07-07"> 
     <item cur1="USD" cur2="RUR">57.8215</item> 
     <item cur1="EUR" cur2="RUR">63.9852</item> 
     <item cur1="EUR" cur2="USD">1.1177</item>  
     <item cur1="USD" cur2="EUR">0.9037</item> 
    </rates> 
</result> 

точно в линии:

 ResultReferences<T> response = (ResultReferences<T>)serializer.Deserialize(reader); 

возвращает null, почему? мой xml неправильно?

Вот сериализованный код:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.Serialization; 

namespace mynamespace 
{ 
    [XmlType(TypeName = "currency")] 
    public class oCurrency 
    { 
     [XmlAttribute] 
     public long id { get; set; } 
     [XmlAttribute] 
     public string name { get; set; } 
    } 
} 
+0

Можете ли вы показать, что именно вы используете в этом случае и код этого объекта? –

+0

@ Pierre-LucPineault обновлен .... – user3112115

+0

Я ничего не вижу в 'oCurrency' под названием« item ». –

ответ

3

Это C# код, который соответствует XML вы публикуемые:

using System; 
using System.Xml.Serialization; 
using System.Collections.Generic; 
namespace Xml2CSharp 
{ 
    [XmlRoot(ElementName="item")] 
    public class Item { 
     [XmlAttribute(AttributeName="cur1")] 
     public string Cur1 { get; set; } 
     [XmlAttribute(AttributeName="cur2")] 
     public string Cur2 { get; set; } 
     [XmlText] 
     public string Text { get; set; } 
    } 

    [XmlRoot(ElementName="rates")] 
    public class Rates { 
     [XmlElement(ElementName="item")] 
     public List<Item> Item { get; set; } 
     [XmlAttribute(AttributeName="date")] 
     public string Date { get; set; } 
    } 

    [XmlRoot(ElementName="result")] 
    public class Result { 
     [XmlElement(ElementName="rates")] 
     public Rates Rates { get; set; } 
     [XmlAttribute(AttributeName="xsi", Namespace="http://www.w3.org/2000/xmlns/")] 
     public string Xsi { get; set; } 
     [XmlAttribute(AttributeName="schemaLocation", Namespace="http://www.w3.org/2001/XMLSchema-instance")] 
     public string SchemaLocation { get; set; } 
    } 
} 

Это generated, конечно; вот почему это так точно. Несмотря на это, он мало похож на класс C#, который вы предоставили.

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