2013-11-21 2 views
2

내 프로젝트에서는 ServiceStack을 사용하여 사용자가 CSV 형식으로 데이터를 내보낼 수 있습니다. 일을하는 것은 ServiceStack이지만 사전은 항상 사전 순으로 정렬되므로 그만 싶습니다. 내 CSV 파일에 정확한 순서로 사전에 데이터를 삽입 한 열이 있어야합니다.ServiceStack - dictionary to csv

이런 정렬을하지 않도록 ServiceStack을 구성하는 방법이 있습니까?

내 사전 : 대신 "ID, IBS 계정 ID, IBS 주문 ID"의 내가 가진

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

, "IBS 계정 ID, IBS 주문 이드, 이드가"

대단히 감사합니다 !!

+0

ServiceStack의 CSV serializer를 사용자 지정하거나 재정의 할 수있는 솔루션을 찾고 있습니다. 그것에 대해 알고 있다면. ^^ –

답변

1

마지막으로 ServiceStack CsvSerializer를 재정의하거나 사용자 지정하는 것이 불가능하다는 것을 발견했습니다.

그래서, 내 솔루션 (I 결국 뭔가를해야하기 때문에), 새로운 사용자 정의 형식을 만듭니다 직렬화 및 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

<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'콘텐츠 유형 및 serializer를 등록 해제하는 방법은 다음과 같습니다. AppHost.cs에서

, AppHost 구성()에서

using ServiceStack.Common; 

...

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에서 그것을하는 방법을 발견했습니다.