【发布时间】:2018-04-30 22:29:12
【问题描述】:
我有一个 XML Schema 文件 (xsd),它序列化为一个文件,这正是我需要该文件的外观和行为方式。但是,我想要的是要实例化的顶级元素,特别是 Header。现在,XSD.exe 生成的源代码只是为我提供了一个作为 header 对象类型的“Header”属性,但它没有被实例化。
使用 System.XML.Serialization 专门用于将对象从 XML 文件序列化为类型化对象。
所以基本上,如果我尝试...
MyDoc.Header.HeaderField1 = "My value";
我得到一个空引用错误。
我必须...
MyDoc.Header = new MyApplication.Models.MyDoc.Header();
MyDoc.Header.HeaderField1 = "My value";
我希望能够简单地让 XSD.exe 工具生成 Header 对象,并在 Header 属性中,从 bat 开始将值设置为 = new Header()。
没什么大不了的,很容易解决,但可以更整洁。 :-p
这基本上是我拥有的架构。
<?xml version="1.0" encoding="utf-8"?>
<!--
xsd MyDoc.xsd /c /n:MyApplication.Models
-->
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsd:element name="MyDoc">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Header">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="HeaderField1" type="xsd:string" />
<xsd:element name="HeaderField2" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Items">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="Item">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Field1" type="xsd:string" />
<xsd:element name="Field2" type="xsd:string" />
<xsd:element name="Field3" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xs:schema>
【问题讨论】:
标签: xml visual-studio xsd schema xsd.exe