2017-05-24 13 views
0

現在、XMLファイルを生成するモジュールを開発中です。リストのインスタンス化の卒業生としてC#XmlElement同じ要素を2回

、私のタグが始まり(operation_unitaire)で2回表示

<compte_type>DROITS_SUSPENDUS</compte_type> 
    <stock_epuise>0</stock_epuise> 
    <operations_unitaires> 
    <operation_unitaire> 
     <operation_unitaire> 
     <categorie_operation>SORTIE</categorie_operation> 
     <date_operation>2016-02-24T00:00:00</date_operation> 
     <produit> 
      <code_bivb /> 
      <millesime>0</millesime> 
      <degre_alcoolique>0</degre_alcoolique> 
     </produit> 
     <type_operation /> 
     <type_justificatif /> 
     <reference_justificatif>HB024227</reference_justificatif> 
     <conditionnement /> 
     <volume>900.00000</volume> 
     </operation_unitaire> 
     <operation_unitaire> 
     <categorie_operation>SORTIE</categorie_operation> 
     <date_operation>2016-02-23T00:00:00</date_operation> 
     <produit> 
      <code_bivb /> 
      <millesime>0</millesime> 
      <degre_alcoolique>0</degre_alcoolique> 
     </produit> 
     <type_operation /> 
     <type_justificatif /> 
     <reference_justificatif>HB024200</reference_justificatif> 
     <conditionnement /> 
     <volume>900.00000</volume> 
     </operation_unitaire> 
    </operation_unitaire> 
</operations_unitaires> 

私たちは通常、

のMODEL operations_unitaires operation_unitaireオブジェクトを含むoperation_unitairesという名前のリストを持っています

[DataContract] 
public class operations_unitaires : ISerializable 
{ 
    [XmlElement(ElementName = "operation_unitaire", Order = 1, IsNullable = true, Type = typeof(List<operation_unitaire>))] 
    [DataMember(Name = "operation_unitaire", Order = 1, IsRequired = false)] 
    public List<operation_unitaire> operation_unitaire { get; set; } //0..n 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     throw new NotImplementedException(); 
    } 

    public operations_unitaires() 
    { 

    } 
} 

モデルの図動作

[DataContract] 
public class operation_unitaire : ISerializable 
{ 
    [XmlElement(ElementName = "categorie_operation", Order = 1, IsNullable = false, Type = typeof(string))] 
    [DataMember(Name = "categorie_operation", Order = 1, IsRequired = true)] 
    public string categorie_operation { get; set; } 

    [XmlElement(ElementName = "date_operation", Order = 2, IsNullable = false, Type = typeof(DateTime))] 
    [DataMember(Name = "date_operation", Order = 2, IsRequired = true)] 
    public DateTime date_operation { get; set; } 

ns_unitaire [...]

は、誰もが今まで問題がありましたか?

UPDATE 1

私は

[DataContract] 
public class operations_unitaires : ISerializable 
{ 
    [XmlElement(ElementName = "operation_unitairess", Order = 1, IsNullable = true, Type = typeof(List<operation_unitaire>))] 
    [DataMember(Name = "operation_unitairess", Order = 1, IsRequired = false)] 
    public List<operation_unitaire> Operation_unitaire { get; set; } //0..n 

をoperation_unitairessし、operation_unitaireをオブジェクトの名前の名前を変更しようとすると、私はこの結果

<compte_type>DROITS_SUSPENDUS</compte_type> 
    <stock_epuise>0</stock_epuise> 
    <operations_unitaires> 
    <operation_unitairess> 
     <operation_unitaire> 
     <categorie_operation>SORTIE</categorie_operation> 
     <date_operation>2016-02-24T00:00:00</date_operation> 
     <produit> 
      <code_bivb /> 

を持っている場合は、[...]

だからこれをやめる方法タグ(operation_unitairess)?

+1

あなたのリストの名前はオブジェクトと同じですが、それらを別のものに保つようにしてください。また、C#のコーディングスタイルを読んでください。 –

+0

私はいくつかのテストをしようとしています –

答えて

0

それは今日、私はこのモデルを呼び出し、この

[XmlElement(ElementName = "operations_unitaires", Order = 3, IsNullable = false, Type = typeof(operations_unitaires))] 
    [DataMember(Name = "operations_unitaires", Order = 3, IsRequired = false)] 
    public operations_unitaires operations_unitaires { get; set; } 

持っ

ちょうど階層問題だった:

だから、それは論理的だ

[DataContract] 
public class operation_unitaire : ISerializable 
{ 
    [XmlElement(ElementName = "categorie_operation", Order = 1, IsNullable = false, Type = typeof(string))] 
    [DataMember(Name = "categorie_operation", Order = 1, IsRequired = true)] 
    public string categorie_operation { get; set; } 

オブジェクトを呼び出す

[DataContract] 
public class operations_unitaires : ISerializable 
{ 
    [XmlElement(ElementName = "operation_unitairess", Order = 1, IsNullable = true, Type = typeof(List<operation_unitaire>))] 
    [DataMember(Name = "operation_unitairess", Order = 1, IsRequired = false)] 
    public List<operation_unitaire> operation_unitairess { get; set; } //0..n 

を、ただ電話するオブジェクトリストは最初のモデルから直接!

0

タグが2回表示されていません。

<compte_type>DROITS_SUSPENDUS</compte_type> 
    <stock_epuise>0</stock_epuise> 
    <operations_unitaires> <!-- your class operations_unitaires --> 
    <operation_unitaire> <!-- your collection of operation_unitaire --> 
     <operation_unitaire> <!-- an instance of of operation_unitaire --> 
     <categorie_operation>SORTIE</categorie_operation> 
     <...> 

(これはあなたのリストの名前ではありません) 「我々はoperation_unitairesという名前のリストを持っています」。

[XmlElement(ElementName = "operation_unitaire", Order = 1, IsNullable = true, Type = typeof(List<operation_unitaire>))] 
[DataMember(Name = "operation_unitaire", Order = 1, IsRequired = false)] 
public List<operation_unitaire> operation_unitaire { get; set; } //0..n 

リストの名前は「operation_unitaire」です。

+0

ありがとう、私はあなたが意味することを理解しています。だからこのタグを表示させないようにしますか?たぶん[XmlIgnore]? –

+0

私はタグを使って何か面白くしようとはしません。できるだけコードを記述したXMLを保つのが最良です。実際にXMLを変更する必要がある場合は、[Implementing IXmlSerializable](https://stackoverflow.com/questions/279534/properway-to-implement-ixmlserializable)を検討したいかもしれませんが、これはもう少し進んでいます。 – Ben

関連する問題