У меня есть XML, который возвращается сторонним веб-сервисом в следующей форме:
<object>
<list name="subscriptions">
<object>
<string name="id">something</string>
<string name="title">something else</string>
<list name="categories" />
<number name="timestamp">1252707770116</number>
</object>
...more 'object'...
</list>
</object>
У меня много проблем при попытке десериализации этих данных в объект. Я не смог сгенерировать схему с использованием xsd.exe, поэтому я вручную создал следующие классы, чтобы попытаться уместить эти данные:
[XmlRoot("object")]
public class ListOfSubscriptions
{
[XmlElement("list")]
public Subscription[] items;
}
[XmlRoot("object")]
public class Subscription
{
[XmlAttribute()]
public string id;
[XmlAttribute()]
public string title;
[XmlAttribute()]
public string[] categories;
[XmlAttribute()]
public string timestamp;
}
Я пытаюсь десериализовать это с помощью следующего кода:
XmlSerializer s = new XmlSerializer(typeof(ListOfSubscriptions));
StreamReader r = new StreamReader("out.xml");
ListOfSubscriptions listSubscribe = (ListOfSubscriptions)s.Deserialize(r);
r.Close();
Однако, когда он заканчивается, listSubscribe
имеет одного члена, и все его поля равны нулю.
Как мне создать шаблон для десериализации?
Спасибо
Обновление - 2010/01/28
Благодаря всем комментариям я изменил свои классы следующим образом:
[XmlRoot("object")]
public class ListOfSubscriptions
{
[XmlElement("list")]
public SubscriptionList[] items;
}
[XmlRoot("list")]
public class SubscriptionList
{
[XmlElement("object")]
public Subscription[] items;
}
[XmlRoot("object")]
public class Subscription
{
[XmlElement("string")]
public string id;
[XmlElement("string")]
public string title;
[XmlElement("list")]
public string[] categories;
[XmlElement("number")]
public string timestamp;
}
Если я закомментирую строки [XmlElement (...)] в подписке и запустлю, я получу, что listSubscribe
имеет один элемент SubscriptionList
, который имеет правильное количество подписок, однако все элементы подписки нулевые.
Если я раскомментирую строки XmlElement, я получаю сообщение об ошибке, отражающее подписку. Я предполагаю, что это запутывается, потому что есть несколько элементов с одинаковым именем.
Как связать имя атрибута с членом класса?