Я не знаю, почему xsd.exe не работает. По моему опыту, полезно дать вам старт, но это небезопасно при создании оптимизированных классов C # для XML-документа, который вы хотите сериализовать. Есть другие инструменты Code-Gen, которые делают подобное. XsdObjectGen является бесплатным, не уверен, что он все еще существует.
В своем комментарии я сказал С другой стороны, довольно сложно вручную написать код для работы с сериализатором Xml.
Этот частичный пример должен помочь вам начать:
[XmlType("generator", Namespace="http://www.w3.org/2005/Atom")]
public partial class FeedGenerator
{
[XmlAttribute]
public string version { get; set; }
[XmlAttribute]
public string uri { get; set; }
[XmlText]
public string text { get; set; }
}
[XmlType("category", Namespace="http://www.w3.org/2005/Atom")]
public partial class FeedCategory
{
[XmlAttribute]
public string scheme { get; set; }
[XmlAttribute]
public string term { get; set; }
}
[XmlType("entry", Namespace="http://www.w3.org/2005/Atom")]
public partial class FeedEntry
{
public FeedCategory category { get; set; }
public string title { get; set; }
public string summary { get; set; }
}
[XmlType("author", Namespace="http://www.w3.org/2005/Atom")]
public partial class FeedAuthor
{
public string name { get; set; }
public string uri { get; set; }
}
[XmlType("link", Namespace="http://www.w3.org/2005/Atom")]
public partial class FeedLink
{
[XmlAttribute]
public string rel { get; set; }
[XmlAttribute]
public string @type { get; set; }
[XmlAttribute]
public string href { get; set; }
}
[XmlType("feed", Namespace="http://www.w3.org/2005/Atom")]
[XmlRoot("feed", Namespace="http://www.w3.org/2005/Atom")]
public partial class FeedList
{
public string id { get;set; }
public string title { get;set; }
public string icon { get;set; }
[XmlElement("link")]
public FeedLink[] links { get;set; }
public FeedGenerator generator { get;set; }
[XmlElement(Namespace="http://a9.com/-/spec/opensearch/1.1/")]
public int totalResults { get;set; }
[XmlElement("entry")]
public FeedEntry[] entries { get; set; }
}
Этот код десериализует только те элементы в классе FeedList.
Если вам нужны дополнительные элементы, добавьте их. Текстовый элемент можно десериализовать как свойство простого типа, например, string, int или DateTime. Сложный элемент должен быть свойством пользовательского класса, украшенного XmlType
.
Для десериализации последовательности из нескольких элементов, таких как элементы link
или entry
, определите массив и украсьте его XmlElement
, как показано. Значения внутри двойных кавычек являются именами элементов, используемых для каждого. Атрибуты в XML получают свойства, украшенные атрибутом XmlAttribute
в коде C #, а значением в кавычках является имя attr. Отсутствие значения означает отображение атрибута в xml, имя которого совпадает с именем свойства, в данное свойство. (Свойство с именем «rel» в коде C #, украшенное XmlAttribute
, сопоставляется со значением атрибута xml с именем «rel» в документе XML)
Если вам нужны элементы из другой схемы (например, схема opensearch и т. Д.), Вам необходимо указать свойства, соответствующие элементам из этой схемы. Опять же, используйте пользовательские классы для сложных типов в XML; простые типы данных C # для простых (только текстовых) элементов в XML. Для простого типа атрибут XmlElement
в свойстве или, для сложного типа, атрибут XmlType
в пользовательском классе должен указывать пространство имен xmlns для этого элемента. Вам не нужно беспокоиться о префиксе элемента - пространство имен - это то, что важно. См. Свойство totalResults в качестве примера.
Если в атрибуте XmlElement
или XmlAttribute
отсутствует немеченое строковое значение, имя элемента или имя атрибута считается именем самого свойства. Итак, в приведенном выше свойстве totalResults
десериализует элемент openSearch:totalResults
, потому что я предоставил xmlns, соответствующий openSearch.
Чтобы десериализовать текстовый узел элемента xml, используйте атрибут XmlText
.
Расширьте приведенный выше пример, и вы сможете десериализовать все, что нужно для десериализации.
EDIT
Но вы можете использовать библиотеку, которая уже создана для этого.
http://code.google.com/p/google-gdata/updates/list