2011-01-23 43 views
5

Xin chào các bạn, hy vọng các bạn đã có một kỳ nghỉ tốt trong những ngày nghỉ.Tạo đối tượng JSON thay vì một mảng bằng cách sử dụng LINQ/JavaScriptSerializer

Tôi đã tạo một WebService trả về danh sách các thành phố và công ty trong các thành phố đó dưới dạng chuỗi JSON sử dụng LINQ/JavaScriptSerializer.

Mã của tôi là khoảng

var data = from c in db.Companies 
      group c by c.City into cities 
      select new 
      { 
       city = cities.Key, 
       companies = from company in cities 
        select company.Name 
      }; 

JavaScriptSerializer jss = new JavaScriptSerializer(); 
return jss.Serialize(data); 

Đó tạo ra chuỗi JSON sau

[ 
    {"city":"Auckland","companies":["Company1","Company2"]}, 
    {"city":"Wellington","companies":["Company3","Company4","Company5"]} 
] 

Tuy nhiên tôi muốn làm cho thành phố phím vì vậy tôi có thể dễ dàng tìm kiếm theo nó

Ví dụ

[ 
    "Auckland" : {"companies":["Company1","Company2"]}, 
    "Wellington" : {"companies":["Company3","Company4","Company5"]} 
] 

Bất kỳ ý tưởng?

+0

Tôi không nghĩ đó là JSON hợp lệ. Bạn có chắc bạn không có nghĩa là dấu ngoặc nhọn thay vì dấu ngoặc vuông? –

+0

Hey @Mark, bạn đang đề cập đến câu hỏi thứ 2? Tôi tự gõ rằng xin lỗi vì lỗi. – Marko

Trả lời

8

Chỉ cần một ý tưởng ... thử

var data = db.Companies 
      .GroupBy(c => c.City) 
      .ToDictionary(g => g.Key, 
          g => new { companies = g.Select(c => c.Name) }); 

Vì vậy, đây sẽ xây dựng một Dictionary<string, xxx> nơi xxx là một loại vô danh với một tài sản duy nhất, "công ty", mà là một chuỗi các tên công ty.

+0

Cảm ơn Jon, tôi nhận được một ngoại lệ mặc dù 'Lỗi 2 Đối số 3: không thể chuyển đổi từ 'AnonymousType # 1' thành 'System.Collections.Generic.IEqualityComparer ' ' – Marko

+0

@Marko I * nghĩ * Tôi thấy vấn đề ở đó - thử cập nhật? (Jon- hy vọng bạn không nhớ tôi hacking đi; p) –

+0

@Marc: Cảm ơn vì điều đó :) Sẽ chỉnh sửa lại chỉ để cố gắng loại bỏ thanh cuộn ... –

Các vấn đề liên quan