我们可以在使用ASP.NET WEB API返回客户端之前解析JSON数据吗

我们可以在使用ASP.NET WEB API返回客户端之前解析JSON数据吗,json,asp.net-mvc-4,asp.net-web-api,Json,Asp.net Mvc 4,Asp.net Web Api,我希望我的Json数据如下所示: {"Person": { "PersonId": "1" "Name":"Brad", "Age":"45", ... } 其中“Person”将是返回的对象类型 当我看到XML格式时,它总是返回指定了对象类型的数据 <Person> <PersonId>1</PersonId> <Name>Brad</Name> <Age>

我希望我的Json数据如下所示:

 {"Person": {
    "PersonId": "1"
    "Name":"Brad",
    "Age":"45",
   ...
  }
其中“Person”将是返回的对象类型

当我看到XML格式时,它总是返回指定了对象类型的数据

<Person>
     <PersonId>1</PersonId>
     <Name>Brad</Name>
     <Age>45</Age>
</Person>
 Where Person is type of Object.

1.
布拉德
45
其中Person是对象的类型。
那么,我们有没有办法获得上述格式中指定的Json数据?

可能是:

public class Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

public class PersonController : ApiController
{
    /*{"ArrayOfPerson":[{"PersonId":1,"Name":"Brad","Age":45},{"PersonId":2,"Name":"Mary","Age":30}]}*/
    [HttpGet]
    public HttpResponseMessage Get()
    {
        Person person1 = new Person { PersonId = 1, Name = "Brad", Age = 45 };
        Person person2 = new Person { PersonId = 2, Name = "Mary", Age = 30 };

        IEnumerable<Person> data = new List<Person> { person1, person2 };
        JToken json = MyHelper.ToJson(data);
        return Request.CreateResponse<JToken>(json);
    }

    //{"Person":{"PersonId":1,"Name":"Brad1","Age":45}} 
    [HttpGet]
    public HttpResponseMessage Get(int id)
    {
        Person data = new Person { PersonId = id, Name = string.Concat("Brad", id), Age = 45 };
        JToken json = MyHelper.ToJson<Person>(data);
        return Request.CreateResponse<JToken>(json);
    }
}


public static class MyHelper
{
    public static JToken ToJson<T>(T source)
    {
        JObject result = new JObject();

        Type type = typeof(T);
        string key = type.Name;
        if (typeof(IEnumerable).IsAssignableFrom(type))
            key = string.Format("ArrayOf{0}", GetEnumeratedType(type).Name);

        JToken value = (source != null) ? JToken.FromObject(source) : JValue.CreateNull();//Newtonsoft.Json 6.0.6
        result.Add(key, value);
        return result;
    }

    /// <summary>
    /// Use http://stackoverflow.com/questions/4129831/how-do-i-get-the-array-item-type-from-array-type-in-net
    /// </summary>
    /// <param name="type"></param>
    /// <returns></returns>
    public static Type GetEnumeratedType(Type type)
    {
        // provided by Array
        var elType = type.GetElementType();
        if (null != elType) return elType;

        // otherwise provided by collection
        var elTypes = type.GetGenericArguments();
        if (elTypes.Length > 0) return elTypes[0];

        // otherwise is not an 'enumerated' type
        return null;
    }
}
公共类人物
{
公共int PersonId{get;set;}
公共字符串名称{get;set;}
公共整数{get;set;}
}
公共类PersonController:ApiController
{
/*{“ArrayOfPerson”:[{“PersonId”:1,“Name”:“Brad”,“Age”:45},{“PersonId”:2,“Name”:“Mary”,“Age”:30}]}*/
[HttpGet]
公共HttpResponseMessage Get()
{
personperson1=新人{PersonId=1,Name=“Brad”,年龄=45};
personperson2=新人{PersonId=2,Name=“Mary”,年龄=30};
IEnumerable data=新列表{person1,person2};
jtokenjson=MyHelper.ToJson(数据);
返回Request.CreateResponse(json);
}
//{“Person”:{“PersonId”:1,“Name”:“Brad1”,“Age”:45}
[HttpGet]
公共HttpResponseMessage获取(int id)
{
个人数据=新的个人{PersonId=id,Name=string.Concat(“Brad”,id),年龄=45};
jtokenjson=MyHelper.ToJson(数据);
返回Request.CreateResponse(json);
}
}
公共静态类MyHelper
{
公共静态JToken-ToJson(T源代码)
{
作业对象结果=新作业对象();
类型=类型(T);
string key=type.Name;
if(typeof(IEnumerable).IsAssignableFrom(type))
key=string.Format(“ArrayOf{0}”,GetEnumeratedType(type).Name);
JToken value=(source!=null)?JToken.FromObject(source):JValue.CreateNull();//Newtonsoft.Json 6.0.6
结果。添加(键、值);
返回结果;
}
/// 
///使用http://stackoverflow.com/questions/4129831/how-do-i-get-the-array-item-type-from-array-type-in-net
/// 
/// 
/// 
公共静态类型GetEnumeratedType(类型类型)
{
//由数组提供
var elType=type.GetElementType();
如果(null!=elType)返回elType;
//由托收另行提供
var elTypes=type.GetGenericArguments();
如果(elTypes.Length>0)返回elTypes[0];
//否则不是“枚举”类型
返回null;
}
}