2016-08-30 3 views
-5

serialisiert Ich habe eine Liste in C# mit 4 Elementen. Diese Liste wird verwendet, um eine Antwort in einem Webdienst zu senden, und ich benötige eine bestimmte Reihenfolge für die Elemente, aber ich habe ein Problem, weil die Liste aus irgendeinem Grund die Reihenfolge ändert, wenn ich sie ausfülle.Wie Sie die Reihenfolge ändern Eigenschaften werden in C#

Erstens ist dies die Klasse der Liste

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.Serialization; 

namespace Mvm.SATWeb.Domain 
{ 
    [Serializable, DataContract] 
    public class puntoDeAtencion 
    { 

     public puntoDeAtencion() 
     { 
     } 

     [DataMember] 
     public string codigoPuntoAtencion { get; set; } 
     [DataMember] 
     public decimal montoIngreso { get; set; } 
     [DataMember] 
     public decimal montoEgreso { get; set; } 
     [DataMember] 
     public decimal ingresoNeto { get; set; }   

    } 
} 

ich eine SQL Server-Abfrage verwenden, um die Liste mit einer Daten

 List<puntoDeAtencion> valores = new List<puntoDeAtencion>(); 
     DataSet ds; 

     Database baseDatos = DatabaseFactory.CreateDatabase(); 
     DbCommand comandoConsulta = baseDatos.GetStoredProcCommand("USP_RiesgoLiqui"); 
     comandoConsulta.CommandTimeout = 600000; 
     baseDatos.AddInParameter(comandoConsulta, "@pvstrIdAgencia", DbType.String, "-1"); 
     baseDatos.AddInParameter(comandoConsulta, "@pvstrFechaInicial", DbType.String, FechaIni); 
     baseDatos.AddInParameter(comandoConsulta, "@pvstrFechaFinal", DbType.String, FechaFin); 

     comandoConsulta.CommandTimeout = 1000000; 
     // baseDatos.ExecuteDataSet(); 

     ds = baseDatos.ExecuteDataSet(comandoConsulta); 

     if (ds.Tables.Count > 0) 
     { 
      for (int i = 0; i < ds.Tables[0].Rows.Count ; i++) 
      { 
      // valores.Add(s) 



       //valores.Add (new punptoDeAtencion(){}  
       valores.Add(new puntoDeAtencion() { codigoPuntoAtencion = Convert.ToString(ds.Tables[0].Rows[i]["Agencia"]), montoIngreso = Convert.ToDecimal(ds.Tables[0].Rows[i]["INGRESONETO"]), montoEgreso = Convert.ToDecimal(ds.Tables[0].Rows[i]["MONTOEGRESO"]), ingresoNeto = Convert.ToDecimal(0.00) }); 


       // var list1 = (from p in ds.Tables[0].Rows[i] select p).ToList(); 
     } 
     } 


     return valores.ToList<puntoDeAtencion>(); 

Dies ist die Antwort (über SOAP UI zu füllen, aber wenn ich Debug die gleichen Werte in der Antwort Objekt zeigen)

<b:listaPuntosDeAtencion> 
    <b:puntoDeAtencion> 
     <b:codigoPuntoAtencion>001</b:codigoPuntoAtencion> 
     <b:ingresoNeto>0</b:ingresoNeto> 
     <b:montoEgreso>53266155.0000</b:montoEgreso> 
     <b:montoIngreso>138285187.0000</b:montoIngreso> 
    </b:puntoDeAtencion> 

und das ist, wie es sein sollte

<listaPuntosDeAtencion> 
    <puntoDeAtencion> 
     <codigoPuntoAtencion>00654</codigoPuntoAtencion> 
     <montoIngreso>79000.0</montoIngreso> 
     <montoEgreso>30000.0</montoEgreso> 
     <ingresoNeto>0.0</ingresoNeto> 
    </puntoDeAtencion> 

Ich möchte die Liste oder die Antwort bestellen, ich weiß nicht, ob LINQ in diesem Fall funktioniert.

+0

Es geht nicht um eine Liste, um - Sie zeigen immer nur ein Objekt. Sie scheinen eine bestimmte Reihenfolge von Eigenschaften im serialisierten Objekt vorzuziehen. Wenn ja, warum ist das wichtig? –

+0

Da die Antwort für andere Dienste verwendet wird, benötigen Sie diese spezifische Reihenfolge. – Jmperez

+1

Nun, verwenden Sie die 'Order' Eigenschaft von' [DataMember] '. –

Antwort

0

Sie können sie bestellen, indem Sie Bestellung auf Datamember wie folgt aus:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.Serialization; 

namespace Mvm.SATWeb.Domain 
{ 
    [Serializable, DataContract] 
    public class puntoDeAtencion 
    { 

     public puntoDeAtencion() 
     { 
     } 

     [DataMember(Order = 0)] 
     public string codigoPuntoAtencion { get; set; } 
     [DataMember(Order = 1)] 
     public decimal montoIngreso { get; set; } 
     [DataMember(Order = 2)] 
     public decimal montoEgreso { get; set; } 
     [DataMember(Order = 3)] 
     public decimal ingresoNeto { get; set; }   

    } 
} 

Dokumentation hier: https://msdn.microsoft.com/en-us/library/ms729813.aspx

+0

Danke, funktioniert wie ich will – Jmperez

Verwandte Themen