2013-12-09 53 views
2

我在評估ServiceStack,並且我已經遵循了一些示例。但是,返回的JSON看起來像{key:arrayofobjects},而不僅僅是{arrayofobjects}。從ServiceStack服務中清理JSON

我該如何返回它,以便JSON更乾淨並且沒有Response屬性作爲關鍵字?

這是正在返回什麼:

{ 
    suburb: 
    { 
     id: 1753, 
     name: "Quorrobolong", 
     postcode: "2325" 
    } 
} 

這是我期待已返回:

{ 
    id: 1753, 
    name: "Quorrobolong", 
    postcode: "2325" 
} 

的服務:

public class SuburbService : Service 
{ 
    public ICacheClient CacheClient { get; set; } 

    public object Get(Suburb request) 
    { 
     string cacheKey = UrnId.Create<Suburb>(request.Id); 
     var resp = Request.ToOptimizedResultUsingCache<SuburbResponse>(CacheClient, cacheKey,() => 
     { 
      return new SuburbResponse { Suburb = Db.LoadSingleById<Suburb>(request.Id) }; 
     }); 
     return resp; 
    } 
} 

的迴應:

public class SuburbResponse : IHasResponseStatus 
{ 
    public Suburb Suburb { get; set; } 
    public ResponseStatus ResponseStatus { get; set; } 
} 

的ORMLite POCO:

[Route("/suburbs", "PUT,POST,PATCH")] 
[Route("/suburbs/{Id}")] 
public partial class Suburb : IHasId<long> 
{ 

    [Alias("SuburbID")] 
    [AutoIncrement] 
    public long Id { get; set;} 

    [Required] 
    public string Name { get; set;} 

    [Required] 
    public string Postcode { get; set;} 
} 

回答

3

的JSON ServiceStack是生產是乾淨;它會產生你所要求的迴應。但爲了獲得更爲平坦的結構,您應該讓SuburbResponse繼承自Suburb而不是包含它。

public class SuburbResponse : Suburb, IHasResponseStatus 
{ 
    public ResponseStatus ResponseStatus { get; set; } 
} 

在你的回報,你可以使用ServiceStack的自動映射器來映射你的Suburb的響應類型,SuburbResponse

ServiceStack 3: 您可以learn about v3 auto-mapper here

using ServiceStack.Common; 
... 

return Db.LoadSingleById<Suburb>(request.Id).TranslateTo<SuburbResponse>(); 

ServiceStack 4: 你可以learn about v4 auto-mapper here

using ServiceStack; 
... 

return Db.LoadSingleById<Suburb>(request.Id).ConvertTo<SuburbResponse>(); 

希望這會有所幫助。如果您有任何問題或其他疑問,請在評論中告知我。

+0

TranslateTo <>擴展程序是什麼? – click2install

+0

你需要包含'ServiceStack.Common'。 – Scott

+0

是啊,谷歌認爲是這麼想的,但是我在項目中引用了ServiceStack.Common 4.0.3.0,但在添加ServiceStack.Common時出現錯誤...有什麼想法? – click2install