0

我从下面的 xml 自动生成了一个 xsd 文件,并使用 xsd2code 来获取 ac# 类。问题是整个 xml 没有反序列化。

这是我尝试反序列化的方式:

    static void Main(string[] args)
    {
        using (TextReader textReader = new StreamReader("config.xml"))
        {
           // string temp = textReader.ReadToEnd();
            XmlSerializer deserializer = new XmlSerializer(typeof(project));
            project p = (project)deserializer.Deserialize(textReader);
        }
    }

这是实际的 XML:

<?xml version='1.0' encoding='UTF-8'?>
<project>
  <scm class="hudson.scm.SubversionSCM">
    <locations>
      <hudson.scm.SubversionSCM_-ModuleLocation>
        <remote>https://svn.xxx.com/test/Validation/CPS DRTest DLL/trunk</remote>
      </hudson.scm.SubversionSCM_-ModuleLocation>
    </locations>
    <useUpdate>false</useUpdate>
    <browser class="hudson.scm.browsers.FishEyeSVN">
      <url>http://fisheye.xxxx.net/browse/Test/</url>
      <rootModule>Test</rootModule>
    </browser>
    <excludedCommitMessages></excludedCommitMessages>
  </scm>
  <openf>Hello there</openf>
  <buildWrappers/>
</project>

当我运行上述内容时,位置节点保持为空。

这是我正在使用的 xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="project">
    <xs:complexType>
      <xs:all>
        <xs:element name="openf" type="xs:string" minOccurs="0" />
        <xs:element name="buildWrappers" type="xs:string" minOccurs="0" />
        <xs:element name="scm" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="useUpdate" type="xs:string" minOccurs="0" msdata:Ordinal="1" />
              <xs:element name="excludedCommitMessages" type="xs:string" minOccurs="0" msdata:Ordinal="2" />
              <xs:element name="locations" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="hudson.scm.SubversionSCM_-ModuleLocation" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="remote" type="xs:string" minOccurs="0" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="browser" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="url" type="xs:string" minOccurs="0" msdata:Ordinal="0" />
                    <xs:element name="rootModule" type="xs:string" minOccurs="0" msdata:Ordinal="1" />
                  </xs:sequence>
                  <xs:attribute name="class" type="xs:string" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="class" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:all>
    </xs:complexType>
  </xs:element>
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="project" />
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>
4

2 回答 2

1

弄清楚了。使用 xsd2code 时,我选择了针对 3.5 框架并包含 xml 属性的选项。它现在按预期反序列化。不确定是哪一个做到的,但现在可以使用。

于 2010-05-25T18:36:17.260 回答
0

根据这个页面'。不是有效的 XML 标记名称字符,因此您需要重命名<hudson.scm.SubversionSCM_-ModuleLocation>为不带点的名称。

于 2010-05-25T18:09:43.323 回答