简体   繁体   English

MVC 4 Web API - 自定义对象的JSON序列化

[英]MVC 4 Web API - JSON serialization for custom objects

I have several objects as followed: 我有几个对象如下:

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) This is the Person controller with Get method: (1)这是带有Get方法的Person控制器:

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

(2) This is the Team controller with Get method: (2)这是带有Get方法的Team控制器:

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;
    }
}

What I want is after user calling http://www.app123.com/api/person 我想要的是用户拨打http://www.app123.com/api/person后

I receive JSON result like this: 我收到这样的JSON结果:

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

and calling http://www.app123.com/api/team 并致电http://www.app123.com/api/team

I receive JSON result like this: 我收到这样的JSON结果:

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

But they never work for me, do you know how to produce the JSON result like above with ASP.NET MVC 4? 但它们从不为我工作,你知道如何使用ASP.NET MVC 4生成如上所述的JSON结果吗?

First, make sure you are using JSON formatter, eg adding following code to Application_Start 首先,确保使用JSON格式化程序,例如将以下代码添加到Application_Start

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

Second, just returning your custom object, JSON formatter will do the rest and you'll get nice JSON data on the client side. 其次,只需返回自定义对象,JSON格式化程序将完成其余工作,您将在客户端获得不错的JSON数据。

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

This one works for me: 这个对我有用:

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;
}

We also need to anotate [Serializable] for Response, Person and Team classes. 我们还需要为Response,PersonTeam类分配[Serializable]

you need to return JSON. 你需要返回JSON。 Try this 试试这个

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);
}
}

and follow same in other controller method too.. 并且在其他控制器方法中也遵循相同的..

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM