2017-02-06 18 views
2

ОТВЕТ:Создание 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); 

     } 

конечной продукции

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

Так из приведенного выше XML все в порядке в соответствии с нашим требованием, кроме одного выделенного в **

<DettaglioLinee> 
     <DettaglioLinee> 

Как вы видите, узел повторяется, что не является обязательным требованием.

Не могли бы вы помочь мне в этом. Попытка исправить это с 2 дней.

Спасибо, Prathap

+0

Im ничего полужирный не видя, чтобы быть в состоянии определить, когда у вас есть вопрос –

+0

вы имеющий вопрос здесь ** ** –

+0

Да Саймон. Позвольте мне выделить этот жирным шрифтом – user2859242

ответ

1

Это должно работать. Это приводит к тому списку, который будет выводиться в плоскую структуру - без ограждающих элементов DettaglioLinee

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

ok Tim. Позвольте мне попробовать – user2859242

+0

Спасибо Тим. Работал как шарм. #stackoverflow rock. Прошло почти 2 дня, и небольшое изменение решило его. – user2859242

+0

Да, я пережил эту боль несколько лет назад. :) –

Смежные вопросы