servicestack,C#,Csv,Dictionary,servicestack" /> servicestack,C#,Csv,Dictionary,servicestack" />

C# ServiceStack-字典到csv

C# ServiceStack-字典到csv,c#,csv,dictionary,servicestack,C#,Csv,Dictionary,servicestack,在我的项目中,我使用ServiceStack允许用户以csv格式导出数据。是ServiceStack完成了这项工作,但它总是按字母顺序对我的字典进行排序,我不希望这样。我希望我的csv文件中的列与我在字典中插入数据的顺序完全一致 有一种方法可以将ServiceStack配置为不进行此排序 我的字典: var excelResult = new Dictionary<string, string>(); excelRes

在我的项目中,我使用ServiceStack允许用户以csv格式导出数据。是ServiceStack完成了这项工作,但它总是按字母顺序对我的字典进行排序,我不希望这样。我希望我的csv文件中的列与我在字典中插入数据的顺序完全一致

有一种方法可以将ServiceStack配置为不进行此排序

我的字典:

var excelResult = new Dictionary<string, string>();            

                    excelResult["Id"] = x.Id.ToString();
                    excelResult["IBS Account Id"] = x.IBSAccountId.ToString(CultureInfo.InvariantCulture);
                    excelResult["IBS Order Id"] = x.IBSOrderId.ToString();
var excelResult=newdictionary();
excelResult[“Id”]=x.Id.ToString();
excelResult[“IBS帐户Id”]=x.IBSAccountId.ToString(CultureInfo.InvariantCulture);
excelResult[“IBS订单Id”]=x.IBSOrderId.ToString();
在我的csv文件中,不是“Id,IBS帐户Id,IBS订单Id”,而是“IBS帐户Id,IBS订单Id,Id”


非常感谢

最后,我发现不可能覆盖或定制ServiceStack CsvSerializer

因此,我的解决方案(因为我必须做一些事情):创建一个新的自定义类型,序列化它并将其写入csv文件:)

步骤1:(AppHOst.cs)注册我的新类型“tapas”(因为我喜欢tapas,但我认为我的潜在客户不会同意:p)

步骤2:(AppHOst.cs)配置创建文件的响应

ResponseFilters.Add((req, res, dto) =>
        {
            if (req.ResponseContentType == "text/x-tapas")
            {
                res.AddHeader(HttpHeaders.ContentDisposition,
                    string.Format("attachment;filename={0}.csv", req.OperationName));
            }
        });
步骤3:(myPage.handlebar)在我的请求链接中将csv与我的新类型交换(在java中用于我的项目)


谢谢你的阅读

以下是如何取消注册默认的“text/csv”内容类型和序列化程序

在AppHost.cs中

using ServiceStack.Common;
在AppHost Configure()中

您的apphost将不再对文本/csv进行任何特殊处理。此时,您应该能够根据自己的意愿再次注册它,如中所述

用你的TapasSerializer代替CSV Serializer,你应该会很好


我从中发现了一条做这件事的线索

我正在寻找一个解决方案来定制或覆盖ServiceStack的CSV序列化程序。如果你知道的话^^
<li><a href="../url/orders?format=x-tapas" target="_blank">{{localize "ExportOrders"}}</a></li>
public class TapasSerializer
{
    static TapasSerializer()
    {
    }

    public static void SerializeToStream(IRequestContext requestContext, object response, Stream stream)
    {
       //TO DO
    }


    public static object DeserializeFromStream(Type type, Stream stream)
    {
        //TO DO
    }

}
using ServiceStack.Common;
SetConfig(new EndpointHostConfig
{
    EnableFeatures = Feature.All.Remove(Feature.Csv),
});