2013-04-04 77 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) 这就是人控制器Get方法:

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

(2) 这是球队控制器Get方法:

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" 
     } 
     ] 
    } 
} 

但他们从不为工作我,你知道如何用ASP.NET MVC 4产生像上面那样的JSON结果吗?

回答

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接口]响应,人团队类。

+1

这就是我在回答中的含义,将JSON结果与JSON行为一起返回! – Sandy 2013-04-05 04:25:41

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 2013-04-04 06:31:56

+0

不,它不起作用 – 2013-04-04 14:01:11

+0

Json不是ApiController的成员,它是Controller的成员,这不起作用。 – mgrenier 2015-09-03 12:43:36

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中的代码? – 2016-04-19 19:25:54