У меня есть XML, который возвращается на 3-й участник веб-службы в следующем виде:десериализации трудно формируется XML для C объекта #
<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
имеет один элемент и все его поля равны нулю.
Как я могу создать свой шаблон для десериализации?
Благодаря
Update - 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, я получаю сообщение об ошибке, соответствующее подписке. Я предполагаю, что его запутали, потому что есть несколько элементов с тем же именем.
Как привязать имя атрибута к члену класса?
Спасибо, это меня намного ближе, у меня все еще есть проблемы с получением данных в объект Subscription, я добавил детали в исходное сообщение. – Aaron
Я собираюсь пойти дальше и принять этот ответ, он заставил меня ближе всех. Я нашел, что могу получить данные в Json, поэтому я использую библиотеку Json.NET для решения проблемы десериализации. Благодарю. – Aaron