
接上篇的问题,给出我自己的解决方案。
同时推荐要学习MVC的可以参考下《ASP.NET MVC4 框架揭秘》。
首先,要自定义JSonResult,就要明白MVC中 JsonResult的定义。源码要自己查了,这里就不罗嗦了。
有一点要知道的就是MVC中的JsonResult是通过JavascriptSerializer(System.Web.Scripts.Serialization.JavaScripteSerializer,要添加System.Web.Extensions.dll)来实现Json序列化和方序列化的。
现在我们要做的就是改变JsonResult序列化Json的方式,改用Json.net,利用Json.net的JsonIgnoreAttribute可以排除掉不用序列话的成员,思想和上篇中第一个解决方案一样,只要需要的字段。
上代码
public class CustomJsonResult : JsonResult
{
public override void ExecuteResult(ControllerContext context)
{ if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Compare(context.HttpContext.Request.HttpMethod, "Get", true) == 0)
{
throw new InvalidOperationException();
}
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = string.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType;
if (this.ContentEncoding != null)
{
response.ContentEncoding = this.ContentEncoding;
}
if (null != this.Data)
{
response.Write(JsonConvert.SerializeObject(this.Data));
}
}
}
public JsonResult GetColleges()
{
List<Models.CollegeInfoModel> list = collegeObj.GetAllModel();
string data = Common.JsonConverter.List2Json<CollegeInfoModel>(list);
Common.CustomJsonResult jr = new Common.CustomJsonResult();
jr.Data = list;// Common.JsonConverter.Json2List<CollegeInfoModel>(data);
jr.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
jr.ContentType = "application/json";
jr.ContentEncoding = System.Text.Encoding.UTF8; return jr;
}