Как сгенерировать C# класс из XSD схемы
Posted on June 6, 2011За основу возьмем XSD схему из прошлого поста)
Нам потребуется тулза: “XML Schema Definition Tool” (Xsd.exe).
В моём случае она валялась тут “C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin”
или
Просто запустите консоль “Visual Studio x64 Win64 Command Prompt 2010″ все необходимые настройки окружения будут подгружены для вас. осталось только напечатать “xsd [params]“
Для генерации класса нам потребуется всего 2-3 параметра
/o —Указать дирректорию для результирующих файлов. Аргумент может быть использован единожды. По умолчанию текущая директория
/c — Сгенерировать файлы по указанной схеме.
/f — Использовать поля при генерации вместо свойств.
введите “xsd schema.xsd /c” и вот он результат генерации
<br />
using System.Xml.Serialization;<br />
//<br />
// This source code was auto-generated by xsd, Version=4.0.30319.1.<br />
//<br />
/// <remarks/><br />
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]<br />
[System.SerializableAttribute()]<br />
[System.Diagnostics.DebuggerStepThroughAttribute()]<br />
[System.ComponentModel.DesignerCategoryAttribute("code")]<br />
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]<br />
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]<br />
public partial class StationList {<br />
/// <remarks/><br />
[System.Xml.Serialization.XmlElementAttribute("Station")]<br />
public StationListStation[] Station;<br />
}<br />
/// <remarks/><br />
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]<br />
[System.SerializableAttribute()]<br />
[System.Diagnostics.DebuggerStepThroughAttribute()]<br />
[System.ComponentModel.DesignerCategoryAttribute("code")]<br />
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]<br />
public partial class StationListStation {<br />
/// <remarks/><br />
public string name;<br />
/// <remarks/><br />
[System.Xml.Serialization.XmlElementAttribute(DataType="anyURI")]<br />
public string url;<br />
/// <remarks/><br />
public string freq;<br />
}<br />
Немного улучшим это сгенеренное безобразие.
Тут хотелось бы заметить , что далеко не всегда стоит трогать автогенеренные классы тк их содержимое может регенерится.
<br />
using System.Xml.Serialization;<br />
using System.Collections.Generic;<br />
/// <remarks/><br />
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]<br />
[System.SerializableAttribute]<br />
[System.Diagnostics.DebuggerStepThroughAttribute]<br />
[System.ComponentModel.DesignerCategoryAttribute("code")]<br />
[XmlTypeAttribute(AnonymousType = true)]<br />
[XmlRootAttribute(Namespace = "", IsNullable = false, DataType = "StationList")]<br />
public partial class StationList<br />
{<br />
/// <remarks/><br />
[XmlElementAttribute("Station", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]<br />
public List<Station> Stations { get; set; }<br />
}<br />
/// <remarks/><br />
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]<br />
[System.SerializableAttribute]<br />
[System.Diagnostics.DebuggerStepThroughAttribute]<br />
[System.ComponentModel.DesignerCategoryAttribute("code")]<br />
[XmlTypeAttribute(AnonymousType = true, TypeName = "StationListStation")]<br />
public partial class Station<br />
{<br />
/// <remarks/><br />
[XmlElementAttribute(ElementName = "name",Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]<br />
public string Name { get; set; }<br />
/// <remarks/><br />
[XmlElementAttribute(ElementName = "url", Form = System.Xml.Schema.XmlSchemaForm.Unqualified, DataType = "anyURI")]<br />
public string Url { get; set; }<br />
/// <remarks/><br />
[XmlElementAttribute(ElementName = "freq", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]<br />
public string Freq { get; set; }<br />
}<br />
Это всё. Мы добавили класс для списока станций
В следующем посте я покажу как загрузить этот список из встроенного в приложение файла.
При переходе с .net 2 на .net 4 нужно ли перегенерить классы?
02.08.2011 11:57
Если схема не изменялась – нет смыла генерить их заново .
02.08.2011 12:30