Microsoft.Net XSD.exe工具,创建实例化类和XMLSerialization

时间:2018-04-30 22:29:13

标签: xml visual-studio xsd schema xsd.exe

我有一个XML Schema文件(xsd),它序列化到一个文件,这正是我需要文件的外观和行为。但是我想要的是一个顶级元素,特别是Header,要实例化。现在,XSD.exe生成的源代码只是为我提供了一个" 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>

1 个答案:

答案 0 :(得分:1)

我发现解决这个问题的最佳方法是在代码中为MyDoc添加一个新的分部类。

所以我最终得到了XSD.exe创建的生成的C#MyDoc.cs文件。然后我创建了一个名为MyDocPartial.cs的新类文件。在那,它看起来像......

namespace MyApplication.Models
{
    public partial class MyDoc
    {

        public MyDoc()
        {
            this.Header = new MyDocHeader();
        }


    }
}

XSD.exe生成一个单独的Partial Class MyDoc。但是它没有定义的构造函数。想想我只是在这里放屁,但也想到我会为其他人分享。 :)

注意,这个部分类也是我放入所有字段映射代码的地方,代码简化添加项目等。总脑屁。希望能帮助到你。 :)