c# - 从架构创建 .cs 时,XSD.exe 会忽略限制吗?
问题描述
我正在尝试创建一个基于 XSD XML SCHEMA 的 .cs 类,但是,当我创建该类时,simpleType 限制并没有延续。使用 XSD.exe 和 VS 开发人员命令提示符从它生成的 SCHEMA 和类。我想知道是否有更好的解决方案来延续限制,据我所知,我需要一个 3d 派对工具,如果可能的话,我想避免使用它。
我的 SCEHMA:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Library">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="User" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="User">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name" />
<xs:element ref="Address" />
<xs:element minOccurs="0" maxOccurs="unbounded" ref="BooksRented" />
</xs:sequence>
<xs:attribute name="UserId" type="xs:ID" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="Name" type="xs:string" />
<xs:element name="Address" type="xs:string" />
<xs:element name="BooksRented">
<xs:complexType>
<xs:sequence>
<xs:element ref="Title" />
<xs:element ref="Author" />
<xs:element ref="Price" />
<xs:element ref="Genre" />
</xs:sequence>
<xs:attribute name="Rents" type="xs:IDREF" />
</xs:complexType>
</xs:element>
<xs:element name="Title" type="xs:string" />
<xs:element name="Author" type="xs:string" />
<xs:element name="Price">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="999"/>
<xs:maxInclusive value="2599"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Genre" type="xs:string" />
</xs:schema>
上面的代码是我的架构。
我创建类的方式是打开 VS 开发人员命令提示符,导航到存储架构的位置并编写类似“XSD MySchema.xsd /c”的内容。我想知道我是否做错了什么,或者是否还有更多问题,如果没有,为了将限制添加到课程中,最好的解决方案是什么?
生成的类,没有限制。
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Library {
private User[] userField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("User")]
public User[] User {
get {
return this.userField;
}
set {
this.userField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class User {
private string nameField;
private string addressField;
private BooksRented[] booksRentedField;
private string userIdField;
/// <remarks/>
public string Name {
get {
return this.nameField;
}
set {
this.nameField = value;
}
}
/// <remarks/>
public string Address {
get {
return this.addressField;
}
set {
this.addressField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("BooksRented")]
public BooksRented[] BooksRented {
get {
return this.booksRentedField;
}
set {
this.booksRentedField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute(DataType="ID")]
public string UserId {
get {
return this.userIdField;
}
set {
this.userIdField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class BooksRented {
private string titleField;
private string authorField;
private int priceField;
private string genreField;
private string rentsField;
/// <remarks/>
public string Title {
get {
return this.titleField;
}
set {
this.titleField = value;
}
}
/// <remarks/>
public string Author {
get {
return this.authorField;
}
set {
this.authorField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(DataType="int")]
public int Price {
get {
return this.priceField;
}
set {
this.priceField = value;
}
}
/// <remarks/>
public string Genre {
get {
return this.genreField;
}
set {
this.genreField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute(DataType="IDREF")]
public string Rents {
get {
return this.rentsField;
}
set {
this.rentsField = value;
}
}
}
使用从 SCHEMA 生成的类并创建一个示例 XML 文件
public class PopulateSchemaXSD
{
public void PopulateSchemaXML()
{
var data = new Library
{
User = new User[]
{
new User
{
UserId = "1",
Name = "Bill",
Address = "BongoStreet",
BooksRented = new BooksRented[]
{
new BooksRented
{
Title = "Buffalo Water",
Author = "John Johnson",
Genre = "Fiction",
Price = 999,
Rents = "1"
},
new BooksRented
{
Title = "Star Ocean",
Author = "Frank Biller",
Genre = "SciFi",
Price = 1232,
Rents = "1"
},
new BooksRented
{
Title = "They Didn't See it Coming",
Author = "Steven Hing",
Genre = "Educational",
Price = 1345,
Rents = "1"
}
}
}
}
};
var serializer = new XmlSerializer(typeof(Library));
using (var stream = new StreamWriter(@"C:\path\example.xml"))
{
serializer.Serialize(stream, data);
}
}
}
解决方案
推荐阅读
- python - 在给定特定输入的情况下,让用户在 for 循环中输入内容,但不传递到下一个文件
- javascript - 模块 '"./node_modules/react-native"' 没有导出的成员 'View'
- php - ErrorException 未定义变量:toplam(查看:C:\wamp64\www\laravel\resources\views\form.blade.php)
- java - 同一json对象中的java重复键
- java - 如何发送异步 Http 响应?
- python - 绘制水平堆积条形图不适用于日期中的 x 轴
- c# - 将数据从 Rust 发送到 C# DLL 时发生 STATUS_HEAP_CORRUPTION 错误
- javascript - 在 React 中合并数据的最佳方法
- vue.js - JS - 如何实现 YTD(年初至今)逻辑以进行日期选择
- python - 使用 Tkinter 对齐每行中的按钮和标签