如何更改顺序属性在 C# 中序列化

How to change the order properties are serialized in C#

我有一个包含 4 个项目的 C# 列表。此列表用于在 Web 服务中发送响应,我需要项目的特定顺序,但我遇到了问题,因为出于某种原因,列表在我填写时更改了顺序。

首先,这是列表class

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 服务器查询来用数据集填充列表

        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 在这种情况下是否有效。

您可以像这样在 DataMember 上使用 Order 来订购它们:

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