Я ищу способ преобразовать схему в класс С# в ядре .NET. В среде .NET я использовал класс XmlCodeExporter для достижения этой цели, но, похоже, это не было перенесено в .NET. Например, вот простая схема:
<?xml version = "1.0"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
<xs:complexType name = "sometype">
<xs:sequence>
<xs:element minOccurs = "0" maxOccurs = "1" name = "somestring" type = "xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name = "sometype" nillable = "true" type = "sometype" />
</xs:schema>
Я могу запустить инструмент xsd для создания следующего класса: xsd.exe Schema.xsd /c
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable=true)]
public partial class sometype {
private string somestringField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string somestring {
get {
return this.somestringField;
}
set {
this.somestringField = value;
}
}
}
Как я могу добиться этого программно?
Заранее спасибо за любую оказанную помощь
В прошлом у Microsoft был инструмент под названием LinqToXsd, который по сути является улучшенной версией XSD.exe.
Хотя они сами больше не поддерживают его, сообщество перенесло его на ядро .NET как LinqToXsdCore. Это на GitHub: https://github.com/mamift/LinqToXsdCore
Он работает на .NET Core, но создаваемый им код предназначен для .NET Standard 2.0, поэтому вы можете использовать его код для .NET Framework/.NET Core.
Обновлено: у него есть средства генерации кода, которые доступны программно, если вы проверите https://github.com/mamift/LinqToXsdCore/blob/master/XObjectsCode/Src/XObjectsCoreGenerator.cs
Привет Mamift, я попробую. Большое спасибо за ваш ответ. Тем временем я нашел следующий пакет, который тоже отлично работает: github.com/mganss/XmlSchemaClassGenerator Еще раз спасибо, ценю помощь