#c# #xml #c#-4.0 #deserialization
#c# #xml #c #-4.0 #десериализация
Вопрос:
Мой XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
<id>sKQ0F4h1ft</id>
<first-name>Govind</first-name>
<last-name>Malviya</last-name>
<positions total="3">
<position>
<id>sdfsdfsf</id>
<title>Founder amp;amp; CEO</title>
<summary>fsdsdf</summary>
<start-date>
<year>2010</year>
<month>12</month>
</start-date>
<is-current>true</is-current>
<company>
<name>sdfsdf</name>
<industry>Internet</industry>
</company>
</position>
<position>
<id>17908sdfsdf4226</id>
<title>Engineer-in-traning</title>
<summary></summary>
<start-date>
<year>2010</year>
<month>3</month>
</start-date>
<is-current>true</is-current>
<company>
<id>sdfsdf</id>
<name>sdfsdf</name>
<industry>sfsdf sdfs sdf </industry>
</company>
</position>
<position>
<id>sdfsdff</id>
<title>Graduate Researcher</title>
<summary></summary>
<start-date>
<year>2006</year>
<month>8</month>
</start-date>
<end-date>
<year>2009</year>
<month>1</month>
</end-date>
<is-current>false</is-current>
<company>
<id>sdfsdf</id>
<name>University of Alberta</name>
<type>Educational Institution</type>
<industry>Higher Education</industry>
</company>
</position>
</positions>
</person>
Классы
[Serializable, XmlRoot("person")]
public class FooUserProfile
{
[XmlElement("id")]
public string ID { get; set; }
[XmlElement("first-name")]
public string FirstName { get; set; }
[XmlElement("last-name")]
public string LastName { get; set; }
[XmlElement("positions")]
public List<FooPosition> Positions { get; set; }
}
[Serializable]
public class FooPosition
{
[XmlElement("id")]
public string ID { get; set; }
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("summary")]
public string Summary { get; set; }
[XmlElement("start-date")]
public FooDate StartDate { get; set; }
[XmlElement("end-date")]
public FooDate EndDate { get; set; }
[XmlElement("is-current")]
public string IsCurrent { get; set; }
[XmlElement("company")]
public FooPositionCompany Company { get; set; }
}
[Serializable]
public class FooDate
{
[XmlElement("year")]
public string Year { get; set; }
[XmlElement("month")]
public string Month { get; set; }
}
[Serializable]
public class FooPositionCompany
{
[XmlElement("id")]
public string ID { get; set; }
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("type")]
public string Type { get; set; }
[XmlElement("industry")]
public string Industry { get; set; }
}
но в положении, в котором я получаю нули, кто-нибудь может сказать мне, где я ошибаюсь.
Ответ №1:
Чтобы указать имена XML-элементов массива ( IList
, ICollection
, и т.д.) и его элементов, вы должны использовать атрибуты XmlArray
и XmlArrayItem
:
[Serializable, XmlRoot("person")]
public class FooUserProfile
{
/* The other members... */
[XmlArray("positions")]
[XmlArrayItem("position")]
public List<FooPosition> Positions { get; set; }
}
Атрибут XmlElement
приводит к тому, что окружающий элемент XML-массива будет опущен и присвоит элементам Xml-массива его имена:
[XmlRoot("Config")]
public class Foo
{
[XmlElement("Id")]
public string[] IdStringArrayWithStupidName;
}
Сериализованный XML:
<?xml version="1.0" encoding="?>
<Config>
<Id></Id>
<Id></Id>
</Config>
Комментарии:
1. как бы вы записали ‘total =»3″‘? Или другие атрибуты в теге списка?
2. Посмотрите на атрибут XmlAttributeAttribute .
3. Все еще новичок в этом синтаксисе, так куда мне это поместить? Если нет класса locations, «total» просто становится общедоступной строкой в FooUserProfile? Как я могу сообщить ему, что мне нужен атрибут locations?