2016-05-11 3 views
0

私はSQL ServerからのXMLをデシリアライズの問題を抱えています。 XMLは良いです。それをデシリアライズするコードは既知の作業コードです。何らかの理由で第1レベルと第2レベルを逆直列化しているだけです。これはクラスとXMLの不一致を意味する必要がありますが、それを見つめた後は識別できません。デシリアライズのXML

これは、XMLの抜粋です。

<Options> 
     <Countries> 
      <Country ID="1" Name="Afghanistan" Code="AF" ISO="4" SubDivision="City" PostalName="Postal Code" /> 
      <Country ID="2" Name="Albania" Code="AL" ISO="8" SubDivision="City" PostalName="Postal Code" /> 
      <Country ID="3" Name="Algeria" Code="DZ" ISO="12" SubDivision="City" PostalName="Postal Code" /> 
      <Country ID="4" Name="American Samoa" Code="AS" ISO="16" SubDivision="City" PostalName="Postal Code" /> 
      <Country ID="5" Name="Andorra" Code="AD" ISO="20" SubDivision="City" PostalName="Postal Code" /> 
     </Countries> 
     <EntityTypes> 
      <EntityType ID="4" Name="Individual" /> 
      <EntityType ID="5" Name="Business" /> 
     </EntityTypes> 
    </Options> 

これはOptionsクラスです:

namespace RecoverItWCF.Classes 
    { 
     [DataContract] 
     [Serializable()] 
     public class Options 
     { 
      [DataMember(Name = "Categories", IsRequired = false)] 
      [XmlElement("Categories")] 
      public Category[] Categories; 
      [DataMember(Name = "Countries", IsRequired = false)] 
      [XmlElement("Countries")] 
      public Country[] Countries; 
      [DataMember(Name = "EntityTypes", IsRequired = false)] 
      [XmlElement("EntityTypes")] 
      public EntityType[] EntityTypes; 
     } 
    } 

これはCountryクラスです:

namespace RecoverItWCF.Classes 
{ 
    [DataContract] 
    [Serializable()] 
    public class Country 
    { 
     [DataMember(Name = "ID", IsRequired = true)] 
     [XmlAttribute("ID")] 
     public string ID { get; set; } 

     [DataMember(Name = "Name", IsRequired = true)] 
     [XmlAttribute("Name")] 
     public string Name { get; set; } 

     // truncated for brevity 
    } 
} 

これはEntityTypeクラスです:

namespace RecoverItWCF.Classes 
    { 
    [DataContract] 
    [Serializable()] 
    public class EntityType 
     { 
     [DataMember(Name = "ID")] 
     [XmlAttribute("ID")] 
     public Int16 ID { get; set; } 

     [DataMember(Name = "Name")] 
     [XmlAttribute("Name")] 
     public string Name { get; set; } 
    } 
} 

Options要素はCategories要素(正解)を含まない、及びCountries要素(正解)を含有しないが、ブレークポイントで強調表示されたときにCountriesレベルがその下に何も(NO Country配列)を有していない、それがなければなりません200 Country要素。 EntityTypes要素も含まれていますが、その下には何もありません。

答えて

0

正しい道を私を導くためXiaoy312 @に感謝します。 Optionsクラスへの修正が必要でした。これで仕事は終わった。

[DataMember(Name = "Countries", IsRequired = false)] 
    [XmlArray("Countries")] 
    [XmlArrayItem("Country")] 
    public List<Country> Countries { get; set; } 
0

あなたは[XmlArrayItem]属性を使用する必要があります。

[XmlArrayItem("Countries", IsNullable=true, Type = typeof(Country))] 
public Country[] Countries; 
+0

は、しかし、うまくいかなかったこと、ありがとうございます。私はOptionsクラスを修正しました。この問題は、CountryクラスとEntityTypeクラスにあるようです。私は親(国)のうちの1つを取得していますが、国レベルではIDと名前のnull値があり、国は1つだけです。 – Greg

関連する問題