我们可以在使用ASP.NET WEB API返回客户端之前解析JSON数据吗
我希望我的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>
{"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;
}
}