2017-02-06 14 views
2

ANSWERあるクラスからXMLを作成します:ティムにより示唆されるようにリスト<ItemDetails>が実体

クラスを変更し、それが魅力のように働きました。

public class DatiBeniServizi1 
    { 
     [XmlElement]   
     public List<DettaglioLinee> DettaglioLinee { get; set; }   

     public DatiRiepilogo1 DatiRiepilogo { get; set; } 
    } 

私はクラスを使用してXMLを作成しようとしています。以下は、クラス

public class DatiBeniServizi1 
     { 
      public List<DettaglioLinee> DettaglioLinee { get; set; }   

      public DatiRiepilogo1 DatiRiepilogo { get; set; } 
     } 
     public class DettaglioLinee 
     { 
      public int NumeroLinea { get; set; } 
      public string Descrizione { get; set; } 
      public int Quantita { get; set; } 
      public decimal PrezzoUnitario { get; set; } 
      public decimal PrezzoTotale { get; set; } 
      public decimal AliquotaIVA { get; set; } 
      public string Natura { get; set; } 
     } 
     public class DatiRiepilogo1 
     { 
      public decimal AliquotaIVA { get; set; } 
      public string Natura { get; set; } 
      public decimal ImponibileImporto { get; set; } 
      public decimal Imposta { get; set; } 
      public string RiferimentoNormativo { get; set; }   
     } 

とXMLを生成するコード

private DatiBeniServizi1 GetXMLExportInvoiceItemDetails(DataTable dtItemDetails, DataTable dtBatches) 
     { 
      DatiBeniServizi1 DatiBeniServizi12 = new DatiBeniServizi1(); 
      List<DettaglioLinee> ItemDetails = new List<DettaglioLinee>(); 

      int i = 1; 
      foreach (DataRow row in dtItemDetails.Rows) 
      {    
       DataRow[] rowList = dtBatches.Select("BatchItemID='" + row["ItemID"].ToString() + "'"); 
       string BatchDetails = string.Empty; 
       if (rowList.Any()) 
       { 
        foreach (DataRow dr in rowList) 
        { 
         BatchDetails = BatchDetails + " - " + "Batch No: " + dr["BatchNo"].ToString() + " Exp: " + Convert.ToDateTime(dr["Expiry Date"]).ToString("dd/MM/yy"); 
        } 
       } 
       ItemDetails.Add(new DettaglioLinee 
       { 
        NumeroLinea = i, 
        Descrizione = row["Description"].ToString() + BatchDetails, 
        Quantita = Convert.ToInt32(row["Qty"]), 
        PrezzoUnitario = Convert.ToDecimal(row["Sell Price"]), 
        PrezzoTotale = Convert.ToDecimal(row["Amount"]), 
        AliquotaIVA = 0.00m, 
        Natura = "N4"      
       }); 
       i++; 
      } 
      DatiBeniServizi12 = new DatiBeniServizi1 
        { 
         DettaglioLinee = ItemDetails,       
         DatiRiepilogo = new DatiRiepilogo1 
         { 
          AliquotaIVA = 0.00m, 
          Natura = "N4", 
          ImponibileImporto = Convert.ToDecimal(gvQuotationDetails.Rows[QuoteIndex].Cells["TotalQuoteAmount"].EditedFormattedValue), 
          Imposta = 0.00m, 
          RiferimentoNormativo = "rif normativo" 
         } 
        }; 

    XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
      ns.Add("xsd", "http://www.w3.org/2001/XMLSchema"); 
      ns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
      ns.Add("versione", "FPA12");    
      XmlSerializer serializer = new XmlSerializer(typeof(FatturaElettronica), "http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2");    
      serializer.Serialize(System.IO.File.Create(@"C:\JD Pics\Schema_fatturapa_v1.3.xml"),DatiBeniServizi12,ns); 

     } 

最終出力は、したがって、上記のXMLからすべてがハイライトさ1を除いて、当社の要件ごとに細かい

<DatiBeniServizi> 
     **<DettaglioLinee> 
     <DettaglioLinee>** 
      <NumeroLinea>1</NumeroLinea> 
      <Descrizione>ACARBOSE TAB 100MG    90 - Batch No: 854697 Exp: 15/11/20</Descrizione> 
      <Quantita>5</Quantita> 
      <PrezzoUnitario>30.50</PrezzoUnitario> 
      <PrezzoTotale>152.50</PrezzoTotale> 
      <AliquotaIVA>0.00</AliquotaIVA> 
      <Natura>N4</Natura> 
     </DettaglioLinee> 
     <DettaglioLinee> 
      <NumeroLinea>2</NumeroLinea> 
      <Descrizione>AEROCHAMBER PLUS DEVICE INFANT/MASK - Batch No: 748569 Exp: 23/11/20 - Batch No: 45789 Exp: 23/11/20</Descrizione> 
      <Quantita>400</Quantita> 
      <PrezzoUnitario>1.13</PrezzoUnitario> 
      <PrezzoTotale>452.00</PrezzoTotale> 
      <AliquotaIVA>0.00</AliquotaIVA> 
      <Natura>N4</Natura> 
     **</DettaglioLinee> 
     </DettaglioLinee>** 
     <DatiRiepilogo> 
     <AliquotaIVA>0.00</AliquotaIVA> 
     <Natura>N4</Natura> 
     <ImponibileImporto>604.50</ImponibileImporto> 
     <Imposta>0.00</Imposta> 
     <RiferimentoNormativo>rif normativo</RiferimentoNormativo> 
     </DatiRiepilogo> 
    </DatiBeniServizi> 

ですされていますin **

<DettaglioLinee> 
     <DettaglioLinee> 

あなたが見ることができるように、要件ではないノードが繰り返されています。

これで私を助けてもらえますか?これを2日後に修正しようとしています。

おかげで、 Prathap

+0

イムは、あなたが問題 –

+0

を持っているとき、あなたはここでの問題を抱えているかを決定することができるように太字で何かを見ていない。** ** –

+0

はいサイモン。太字のを – user2859242

答えて

1

これは動作するはずです。これは、フラット構造で出力するリストの原因 - 囲むDettaglioLinee要素なし

[XmlElement] 
List<DettaglioLinee> ItemDetails = new List<DettaglioLinee>(); 
+0

ok Timにハイライトしてみましょう。試してみましょう – user2859242

+0

ありがとうTim。魅力のように働いた。 #stackoverflow rocks。ほぼ2日を費やし、小さな変化がそれを解決しました。 – user2859242

+0

はい、私は数年前にその痛みを経験しました。 :) –

関連する問題