2013-01-22 29 views
5

Tôi đang cố gắng thay đổi đầu ra json từ API Web. Nói rằng tôi có một đối tượng như dân, sản lượng hiện nay sẽ như thế nào:API Web ASP.net - Thêm Tên mảng vào Đầu ra

[{name:"John", sex:"M"},{name:"Simon", sex:"M"}] 

Tuy nhiên tôi muốn đầu ra được như:

{"people":[{name:"John", sex:"M"},{name:"Simon", sex:"M"}]} 

Bất kỳ ý tưởng về cách thức này có thể được thực hiện?

Trả lời

14

Lựa chọn 1 - Tạo mô hình mới

Thay vì trả lại

public IEnumerable<Person> Get() 

trở

public People Get() 

nơi

public class People { 
    public IEnumerable<Person> People {get; set;} 
} 

Lựa chọn 2 - trở lại động

Thay vì trả lại

public IEnumerable<Person> Get() 

trở

public dynamic Get() { 
    IEnumerable<Person> p = //initialize to something; 
    return new {people = p}; 
} 

Tùy chọn 3 - sửa đổi JsonMediaTypeFormatter

Bạn vẫn có thể quay trở lại

public IEnumerable<Person> Get() 

nhưng thêm lớp sau:

public class PeopleAwareJsonMediaTypeFormatter : JsonMediaTypeFormatter 
{ 
    public override System.Threading.Tasks.Task WriteToStreamAsync(Type type, object value, System.IO.Stream writeStream, HttpContent content, TransportContext transportContext) 
    { 
     if ((typeof (IEnumerable<People>).IsAssignableFrom(type))) 
     { 
      value = new {people = value}; 
     } 
     return base.WriteToStreamAsync(type, value, writeStream, content, transportContext); 
    } 
} 

bây giờ trong WebApiConfig chỉ đăng ký định dạng mới thay vì cũ JSON một:

config.Formatters.RemoveAt(0); 
config.Formatters.Insert(0, new PeopleAwareMediaTypeFormatter()); 
0

Bạn phải có một DTO cho JSON này. Vì vậy, những gì bạn phải làm là chỉ có một container cho mảng của bạn.

public class ReturnedJson 
{ 
    public IList<People> People {get;set;} 
} 

public class People 
{ 
    public string name {get;set;} 
    public string sex{get;set;} 
} 

Đây là giả định của tôi rằng bạn có DTO cho json này, vì bạn chưa hiển thị bất kỳ mã nào.

0

xây dựng vào tùy chọn thứ hai Filip W, đây độc đáo kéo từ cơ sở dữ liệu từ Danh sách thực hiện IEnumerable:

công Get động() {

List<Person> personList = new List<Person>(); 

using (DataTable dt = db.ExecuteDataTable("PeopleSelect")) { 
    foreach (DataRow dr in dt.Rows) { 
     personList.Add(new Person { name = (string)dr["name"], ...}); 
    } 
} 

return new { people = personList }; 

}

2

Cho phép giả định biến tên của đối tượng danh sách là PersonList trả về

[{name:"John", sex:"M"},{name:"Simon", sex:"M"}] 

Bạn có thể chỉ đơn giản là trở về như sau mà không đau đớn

 return new 
     { 
      people = PersonList 
     }; 

sau đó bạn sẽ phải

{"people":[{name:"John", sex:"M"},{name:"Simon", sex:"M"}]} 
Các vấn đề liên quan