2013-04-04 1 views
7

У меня есть несколько объектов, как следует:MVC 4 Web API - JSON сериализации для пользовательских объектов

public class Person 
{ 
    string FirstName; 
    string LastName; 
    public Person(string fn, string ln) 
    { 
     FirstName = fn; 
     LastName = ln; 
    } 
} 

public class Team 
{ 
    string TeamName; 
    Person TeamLeader; 
    List<Person> TeamMembers; 

    public Team(string name, Person lead, List<Person> members) 
    { 
     TeamName = name; 
     TeamLeader = lead; 
     TeamMembers = members; 
    } 
} 

public class Response 
{ 
    int ResponseCode; 
    string ResponseMessage; 
    object ResponsePayload; 
    public Response(int code, string message, object payload) 
    { 
     ResponseCode = code; 
     ResponseMessage = message; 
     ResponsePayload = payload; 
    } 
} 

(1) Это контроллер Человек с Получ:

public class PersonController : ApiController 
{ 
    public Response Get() 
    { 
     Person tom = new Person("Tom", "Cruise"); 
     Response response = new Response(1, "It works!", tom); 
     return response; 
    } 
} 

(2) Это контроллер команды с Получом:

public class TeamController : ApiController 
{ 
    public Response Get() 
    { 
     Person tom = new Person("Tom", "Cruise"); 
     Person cindy = new Person("Cindy", "Cullen"); 
     Person jason = new Person("Jason","Lien"); 
     Team awesome = new Team("Awesome", jason, new List<Person>(){tom,cindy}); 
     Response response = new Response(1, "It works!", awesome); 
     return response; 
    } 
} 

Что я хочу кормовое эр пользователь вызова http://www.app123.com/api/person

Я получаю JSON результат, как это:

{ 
    "ResponseCode":1, 
    "ResponseMessage":"It works!", 
    "ResponsePayload": 
    { 
    "FirstName":"Tom", 
    "LastName":"Cruise" 
    } 
} 

и вызова http://www.app123.com/api/team

Я получаю JSON результат, как это:

{ 
    "ResponseCode":1, 
    "ResponseMessage":"It works!", 
    "ResponsePayload": 
    { 
    "TeamLeader": 
     { 
      "FirstName":"Jason", 
      "LastName":"Lien" 
     } 
     "TeamMember": 
     [ 
     { 
      "FirstName":"Tom", 
      "LastName":"Cruise" 
     }, 
     { 
      "FirstName":"Cindy", 
      "LastName":"Cullen" 
     } 
     ] 
    } 
} 

Но они никогда не работают me, вы знаете, как создать результат JSON, как и выше, с ASP.NET MVC 4?

ответ

5

Это один работает для меня:

public object Get() 
{ 
    Person tom = new Person("Tom", "Cruise"); 
    Person cindy = new Person("Cindy", "Cullen"); 
    Person jason = new Person("Jason", "Lien"); 
    Team awesome = new Team("Awesome", jason, new List<Person>() { tom, cindy }); 
    Response response = new Response(1, "It works!", awesome); 
    JsonResult jsonResult = new JsonResult { 
     Data= response, 
     JsonRequestBehavior = JsonRequestBehavior.AllowGet 
    }; 
    return jsonResult.Data; 
} 

Мы также должны anotate [Serializable] для Response, Лицо и Команда классы.

+1

Это то, что я имел в виду в своем ответе, возвращая результат JSON вместе с божественным JSON! – Sandy

2

вам необходимо вернуть JSON. Попробуйте

public class PersonController : ApiController 
{ 
public Response Get() 
{ 
    Person tom = new Person("Tom", "Cruise"); 
    Response response = new Response(1, "It works!", tom); 
    return Json(response, JsonRequestBehavior.AllowGet); 
} 
} 

и следуйте же в другом методе контроллера тоже ..

+0

Дайте мне знать, если это не поможет. – Sandy

+0

нет, не работает –

+0

Json не является членом ApiController, его членом Контроллера это не работает. – mgrenier

10

Во-первых, убедитесь, что вы используете форматирование JSON, например. добавив следующий код Application_Start

var json = config.Formatters.JsonFormatter; 
json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; 

Во-вторых, просто вернув пользовательский объект, JSON форматировщик сделает все остальное, и вы получите хорошие данные в формате JSON на стороне клиента.

[HttpGet] 
public HttpResponseMessage GetPeopleList() 
{ 
    var people = // create a list of person here... 
    return Request.CreateResponse(HttpStatusCode.OK, people); 
} 
+0

Вы добавляете этот код, который вы вставили в WebApiConfig.cs? –

Смежные вопросы