আপনি যদি ওয়েব এপিআই ব্যবহার করে থাকেন তবে সিরিয়ালাইজার পরিবর্তন করা সহজ, তবে দুর্ভাগ্যক্রমে এমভিসি নিজেই JavaScriptSerializer
এটিকে JSON.Net ব্যবহার করার জন্য কোনও বিকল্প ছাড়াই ব্যবহার করে।
জেমসের উত্তর এবং ড্যানিয়েলের উত্তর আপনাকে জেএসওএন.নেটের নমনীয়তা দেয় তবে এর অর্থ হ'ল যেখানে আপনি সাধারণত যে কোনও জায়গায় return Json(obj)
পরিবর্তন করতে হবে return new JsonNetResult(obj)
বা একইরকম হতে হবে যা আপনার যদি একটি বড় প্রকল্প রয়েছে কোনও সমস্যা প্রমাণ করতে পারে, এবং খুব নমনীয়ও নয় যদি আপনি যে সিরিয়ালাইজারটি ব্যবহার করতে চান তাতে আপনি নিজের মন পরিবর্তন করেন।
আমি ActionFilter
রাস্তায় নামার সিদ্ধান্ত নিয়েছি । নীচের কোডটি আপনাকে ব্যবহার করে যে কোনও পদক্ষেপ নিতে JsonResult
এবং কেবল JSON.Net (লোয়ার কেসের বৈশিষ্ট্য সহ) ব্যবহার করতে এটিতে কোনও বৈশিষ্ট্য প্রয়োগ করতে দেয়:
[JsonNetFilter]
[HttpPost]
public ActionResult SomeJson()
{
return Json(new { Hello = "world" });
}
এমনকি আপনি সমস্ত ক্রিয়ায় স্বয়ংক্রিয়ভাবে প্রয়োগ করতে এটি সেট আপ করতে পারেন (কেবলমাত্র ছোটখাটো পারফরম্যান্সের is
পরীক্ষার সাহায্যে):
ফিল্টারকনফিগ। সি
filters.Add(new JsonNetFilterAttribute());
কোড
public class JsonNetFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result is JsonResult == false)
return;
filterContext.Result = new CustomJsonResult((JsonResult)filterContext.Result);
}
private class CustomJsonResult : JsonResult
{
public CustomJsonResult(JsonResult jsonResult)
{
this.ContentEncoding = jsonResult.ContentEncoding;
this.ContentType = jsonResult.ContentType;
this.Data = jsonResult.Data;
this.JsonRequestBehavior = jsonResult.JsonRequestBehavior;
this.MaxJsonLength = jsonResult.MaxJsonLength;
this.RecursionLimit = jsonResult.RecursionLimit;
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet
&& String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
throw new InvalidOperationException("GET not allowed! Change JsonRequestBehavior to AllowGet.");
var response = context.HttpContext.Response;
response.ContentType = String.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType;
if (this.ContentEncoding != null)
response.ContentEncoding = this.ContentEncoding;
if (this.Data != null)
{
var json = JsonConvert.SerializeObject(
this.Data,
new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
response.Write(json);
}
}
}
}