2010-05-25 5 views
0

J'ai généré automatiquement un fichier xsd à partir du fichier XML ci-dessous et j'ai utilisé xsd2code pour obtenir une classe C#. Le problème est que le xml entier ne désérialise pas.Problème de désérialisation du fichier XML

Voici comment je tente de désérialiser:

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); 
     } 
    } 

ici est le XML réel:

<?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> 

Quand je lance ce qui précède, le nœud reste nulle emplacements.

Voici le xsd que j'utilise:

<?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> 

Répondre

1

Compris. Lors de l'utilisation de xsd2code, j'avais des options de sélection pour cibler le framework 3.5 et inclure les attributs xml. Il désérialise maintenant comme prévu. Je ne sais pas lequel l'a fait, mais ça marche maintenant.

0

Selon this page '' n'est pas un caractère de nom de balise XML valide, vous devez donc renommer <hudson.scm.SubversionSCM_-ModuleLocation> en quelque chose sans les points.

+1

Cela ne devrait pas être le problème. Les points sont bien dans les noms XML. Ils sont inclus dans la production [4a] dans les recommandations XML 1.0 et XML 1.1. Ce que vous ne pouvez pas faire est d'utiliser un point pour commencer un nom. –