2014-03-12 50 views
3

我在Web API Web服務中使用Linq to SQL從數據庫檢索數據並返回JSON文件。在Web API中將數組標題添加到Linq-to-SQL-to-JSON

我的問題其實很簡單,但我已經通過論壇,找不到答案。請在下面找到我的問題的描述,以及我的(簡化的)源代碼。

我返回的對象有兩個級別的數據。爲了讓你明白,這裏是我的課怎麼看起來像:

public class X 
{ 
    public int ID { get; set; } 
    public DateTime date { get; set; } 

    public virtual ICollection<Y> Ys 
    public virtual ApplicationUser User { get; set; } 
} 

public class Y 
{ 
    public int ID { get; set; } 
    public int XID { get; set; } 
    public decimal Price { get; set; } 
    public int Quantity { get; set; } 

    public virtual X x { get; set; } 
} 

你可以看到,每一個X1對象,我可以有一個嵌套了好X2對象。

要檢索,我用下面的LINQ在我的WebAPI控制器到SQL:

public IHttpActionResult GetXsByUser(string userID) 
    { 
     var xs = (from x in db.Xs 
         where x.User.Id == userID 
         orderby x.date 
         select new 
         { 
          x_id = x.ID, 
          date = x.date, 
          Ys = (from y in db.Ys 
             where x.User.Id == userID && x1.ID == y.XID 
             select new 
             { 
              unit_price = y.Price, 
              quantity = y.Quantity 
             }) 
         }); 
     if (xs == null) 
     { 
      return NotFound(); 
     } 
     return Ok(xs); 
} 

我的web服務工作正常,並返回以下JSON:

[ 
    { 
    "$id": "1", 
    "x_id": 1, 
    "date": "2014-01-24T00:00:00", 
    "Ys": [ 
     { 
     "$id": "2", 
     "unit_price": 2.47, 
     "quantity": 2 
     }, 
     { 
     "$id": "3", 
     "unit_price": 1.25, 
     "quantity": 3 
     }, 
     { 
     "$id": "4", 
     "unit_price": 1.99, 
     "quantity": 2 
     } 
    ] 
    }, 
    { 
    "$id": "5", 
    "x_id": 2, 
    "date": "2014-01-28T00:00:00", 
    "Ys": [ 
     { 
     "$id": "6", 
     "unit_price": 6.22, 
     "quantity": 1 
     }, 
     { 
     "$id": "7", 
     "unit_price": 1.2, 
     "quantity": 3 
     } 
    ] 
    } 
] 

的問題是,要然後在我的移動應用程序反序列化,我必須使用類如下:

public class Y 
{ 
    public string _$id { get; set; } 
    public double unit_price { get; set; } 
    public int quantity { get; set; } 
} 

public class RootObject 
{ 
    public string _$id { get; set; } 
    public int x_id { get; set; } 
    public string date { get; set; } 
    public List<Y> Ys { get; set; } 
} 

但是iw烏爾德希望能夠使用類如下:

public class Y 
{ 
    public string _$id { get; set; } 
    public double unit_price { get; set; } 
    public int quantity { get; set; } 
} 

public class OnlineX 
{ 
    public string _$id { get; set; } 
    public int x_id { get; set; } 
    public string date { get; set; } 
    public List<Y> Ys { get; set; } 
} 

public class RootObject 
{ 
    public List<OnlineX> OnlineXs { get; set; } 
} 

我有一個JSON的編輯工作,並知道了解決方案,使這是具有下列JSON文件,而不是以前的一個:

{ 
    "OnlineXs": [ 
    { 
     "$id": "1", 
     "x_id": 1, 
     "date": "2014-01-24T00:00:00", 
     "Ys": [ 
     { 
      "$id": "2", 
      "unit_price": 2.47, 
      "quantity": 2 
     }, 
     { 
      "$id": "3", 
      "unit_price": 1.25, 
      "quantity": 3 
     }, 
     { 
      "$id": "4", 
      "unit_price": 1.99, 
      "quantity": 2 
     } 
     ] 
    }, 
    { 
     "$id": "5", 
     "x_id": 2, 
     "date": "2014-01-28T00:00:00", 
     "Ys": [ 
     { 
      "$id": "6", 
      "unit_price": 6.22, 
      "quantity": 1 
     }, 
     { 
      "$id": "7", 
      "unit_price": 1.2, 
      "quantity": 3 
     } 
     ] 
    } 
    ] 
} 

請注意,唯一改變的是我添加一個標題給我的數組Xs(「Online Xs」)。這就是爲什麼我說我的問題很簡單。但事情是,我不知道如何在Web API中做到這一點。這只是我的Linq to SQL請求中的一個小改動?我應該建立一個自定義的JSON序列化程序嗎?

我希望我的問題很清楚,如果您想了解更多信息,我會很樂意提供。

感謝很多提前

編輯:

好吧,我已經找到了解決辦法,這是簡單的。那就是:

我不得不更換:

return Ok(xs); 

通過

return Ok(new { OnlineXs = xs }); 
+0

經過幾個小時撓我的頭我終於結束了你的答案。哥們,謝啦 ;) –

回答

2

只是爲了修改你的答案,當你返回IHttpActionResult,只需將查詢結果分配到指定的屬性和回覆它像:

return Ok(new { OnlineXs = xs});