问题反序列化xml文件

时间:2010-05-25 17:52:09

标签: c# xml xml-deserialization

我从下面的xml自动生成了一个xsd文件,并使用xsd2code获取了一个c#类。问题是整个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>

当我运行上述命令时,locations节点保持为空。

这是我正在使用的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>

2 个答案:

答案 0 :(得分:1)

想出来。当使用xsd2code时,我选择了以3.5框架为目标的选项并包含xml属性。它现在按预期反序列化。不知道是哪一个做到了,但现在有效。

答案 1 :(得分:0)

根据this page'。'不是有效的XML标记名称字符,因此您需要将<hudson.scm.SubversionSCM_-ModuleLocation>重命名为没有点的内容。