2013-11-21 47 views
2

在我的項目中,我使用ServiceStack允許用戶以CSV格式導出數據。這是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(); 

而在我的CSV文件,而不是 「ID,IBS賬戶ID,IBS訂單ID」 我有 「IBS賬戶ID,IBS訂單ID,ID」

非常感謝你 !!

+0

我正在尋找自定義解決方案或覆蓋ServiceStack的CSV序列化程序。如果你對此有任何想法。 ^^ –

回答

1

最後,我發現重寫或自定義ServiceStack CsvSerializer是不可能的(?)。

所以,我的解決方案(因爲我必須做一些事情畢竟):創建新的自定義類型,序列化和它在一個CSV文件:)

步驟1寫:(AppHOst.cs)註冊我的新型的「小吃」(因爲我喜歡的小吃,但我不認爲我的鉛會確定與:p)

ContentTypeFilters.Register("text/x-tapas", 
TapasSerializer.SerializeToStream, TapasSerializer.DeserializeFromStream); 

步驟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.handlebars)交換CSV與我的新類型在我的請求鏈接(在Java中爲我的項目)

<li><a href="../url/orders?format=x-tapas" target="_blank">{{localize "ExportOrders"}}</a></li> 

第4步:您的小吃串行!

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 
    } 

} 

謝謝您的閱讀!

2

以下是如何註銷默認的'text/csv'內容類型和序列化程序。

在AppHost.cs,

using ServiceStack.Common; 

在APPHOST配置()...

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

你APPHOST將不再做文本/ CSV任何特殊處理。此時,您應該可以根據需要重新註冊它,如How to register your own custom format with ServiceStack中所述。

用你的TapasSerializer代替CsvSerializer,你應該很好。

我發現了一條線索,如何從this SO answer開始做。