2016-08-30 2 views
-5

私はC#で4項目のリストを持っています。このリストは、Webサービスで応答を送信するために使用され、アイテムの特定の順序が必要ですが、何らかの理由でリストに記入すると順序が変更されるため、問題があります。注文プロパティを変更する方法はC#でシリアライズされています

まず、これはリストのクラスである

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

    } 
} 

私は、データセットでリストを埋めるために、SQL Serverクエリを使用

 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>(); 

これは、SOAP UIを使用して応答(ですが、デバッグ時に応答オブジェクト内の同じ値を表示する)

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

これはどのようにして

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

リストまたはレスポンスを注文したいと思いますが、この場合はLINQが動作するかどうかわかりません。

+0

をこれは、リストの順序に関するものではありません - あなたは常に1つのオブジェクトのみを表示します。シリアライズされたオブジェクトでは、指定された順序でプロパティを優先しているようです。もしそうなら、それはなぜ重要ですか? –

+0

応答は他のサービスに使用されるため、この特定の注文が必要です。 – Jmperez

+1

さて、 '[DataMember]'の 'Order'プロパティを使用してください。 –

答えて

0

あなたはこのようにデータメンバーに注文を使用して、それらを注文することができます:ここ

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

    } 
} 

ドキュメント:https://msdn.microsoft.com/en-us/library/ms729813.aspx

+0

ありがとう、私が望むように動く – Jmperez

関連する問題