यदि आप वेब एपीआई का उपयोग कर रहे हैं तो धारावाहिक बदलना सरल है, लेकिन दुर्भाग्यवश MVC स्वयं JavaScriptSerializer
को JSON.Net का उपयोग करने के लिए इसे बदलने के लिए कोई विकल्प नहीं देता है।
जेम्स का जवाब और डैनियल का जवाब आपको JSON.Net का लचीलापन देता है लेकिन इसका मतलब यह है कि हर जगह जहां आप सामान्य रूप से करते हैं, return Json(obj)
आपको return new JsonNetResult(obj)
उसी तरह बदलना होगा या अगर आपके पास एक बड़ा प्रोजेक्ट है तो यह एक समस्या साबित हो सकती है, और यह भी बहुत लचीला नहीं है अगर आप जिस धारावाहिक का उपयोग करना चाहते हैं, उस पर अपना विचार बदल दें।
मैंने ActionFilter
मार्ग नीचे जाने का निर्णय लिया है । नीचे दिया गया कोड आपको किसी भी कार्रवाई का उपयोग करने की अनुमति देता है JsonResult
और केवल JSON.Net (निचले मामले के गुणों के साथ) का उपयोग करने के लिए उस पर एक विशेषता लागू करता है:
[JsonNetFilter]
[HttpPost]
public ActionResult SomeJson()
{
return Json(new { Hello = "world" });
}
आप इसे स्वचालित रूप से सभी कार्यों पर लागू कर सकते हैं (केवल is
चेक के मामूली प्रदर्शन के साथ ):
FilterConfig.cs
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);
}
}
}
}