カスタムMVCのControllerのJson変換器による日付シーケンス化フォーマットの問題の解決
今日、MVCフレームワークの下でEasyUIのdatagridを使用してデータをロードする場合、サービス側が返すJson日付フォーマットは/Date(14308800000+0800)/であり、クライアントのさらなる変換が必要であり、EasyUIでよく使われる日付フォーマットの要求にも合致しないため、MVCフレームワークの下でのControllerについていくつかの検討を行った.この問題はControllerのJsonメソッドを拡張することで解決でき,さらにシーケンス化クラスをカスタマイズすることで,任意のタイプのデータのシーケンス化フォーマット要件を満たすことができることが分かった.
この目標を達成するには、次の3つのステップを実行する必要があります.
1、Controllerの派生クラスを作成し、カスタムJsonResultを導入する
2、JsonResultの派生クラスを作成し、Json日付フォーマットのカスタム実現を実現する
3、カスタム日付シーケンス化フォーマットを必要とするすべてのコントローラは、上記のControllerの派生クラスに継承する必要がある
具体的なコード実装例は以下の通りである.
この目標を達成するには、次の3つのステップを実行する必要があります.
1、Controllerの派生クラスを作成し、カスタムJsonResultを導入する
2、JsonResultの派生クラスを作成し、Json日付フォーマットのカスタム実現を実現する
3、カスタム日付シーケンス化フォーマットを必要とするすべてのコントローラは、上記のControllerの派生クラスに継承する必要がある
具体的なコード実装例は以下の通りである.
///
/// ExecuteResult ,
///
public class VMEJsonResult : JsonResult
{
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (this.Data != null)
{
JsonSerializerSettings setting = new JsonSerializerSettings();
//
setting.DateFormatString = "yyyy-MM-dd HH:mm:ss";
response.Write(JsonConvert.SerializeObject(Data, setting));
}
}
}
///
/// Controller Json
///
public class VMEController : Controller
{
protected override JsonResult Json(object data, string contentType, Encoding contentEncoding)
{
return new VMEJsonResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding };
}
public new JsonResult Json(object data, JsonRequestBehavior jsonRequest)
{
return new VMEJsonResult { Data = data, JsonRequestBehavior = jsonRequest };
}
public new JsonResult Json(object data)
{
return new VMEJsonResult { Data = data, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
}
///
/// , VMEController
///
public class CouponController : VMEController
{
public ActionResult Index()
{
return View();
}
public ActionResult GetAllCouponTypes()
{
Hashtable hashtable = new Hashtable();
hashtable["sessionId"] = "";
string json = JsonHelper.Serialize(hashtable);
string retJson = HttpHelper.PostForJson("http://localhost/vme", "CouponService.svc", "GetAllCouponTypes", json);
string jsonResult = JsonHelper.GetString(retJson);
List results = JsonHelper.DeserializeObject>(jsonResult);
return Json(results, JsonRequestBehavior.AllowGet);
}
}