У меня есть файл XML-схемы (xsd), который сериализуется в файл именно так, как мне нужно, чтобы файл выглядел и вел себя. Однако я хочу, чтобы элемент верхнего уровня, в частности заголовок, был создан. Прямо сейчас исходный код, сгенерированный XSD.exe, просто предоставляет мне свойство «Заголовок», типизированное как объект заголовка, но не созданное.
Использование 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 установить значение = new Header() прямо из летучей мыши.
Ничего страшного, легко обойти, но могло быть и поаккуратнее. :-п
Вот в основном схема, которая у меня есть.
<?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>