场景:有三个市场(Global、China、USA),对前台传过来的数据有些验证需要细化到每个市场去完成。
所以就出现了基类(Global)和派生类(China、USA)
定义基类(Global)PersonalInformationController
:
public abstract class PersonalInformationController : BaseController { #region Abstract/Virtual Methods //定义一个抽象方法 public abstract JsonResult ValidatePersonalInfo(string personJsonString); #endregion [HttpPost] public JsonResult Validate() { //这里就是不急着反序列化到具体实体中,纯粹获取json数据。 string myJson = string.Empty; using (System.IO.StreamReader sr = new System.IO.StreamReader(Request.InputStream)) { myJson = sr.ReadToEnd(); } Agreement agreement = null; JsonResult jsResult = ValidatePersonalInfo(myJson); if (jsResult != null) { return jsResult; } }
现在需要将China前台传过来的数据进行验证,其实mvc中自己实现了反序列化"Post Body",诸如:
[HttpPost] public JsonResult Validate(TestModel model) { ///............... }
定义一个具体的实体去接收数据。那问题来了,Global中用具体的实体接收这个数据,但是不同的市场的数据是不一样的,所以这里就轮到StreamReader上场了,将json数据读取出来不急着反序列化。而是将json数据通过抽象方法传递到China的后台验证中,让它反序列化到对应的实体中。
//China市场的后台验证 public class PersonalInformationController : Global.Controllers.PersonalInformationController { //重写基类中function并实现. public override JsonResult ValidatePersonalInfo(string personJsonString) { agreement = null; PersonalInformationViewModel personViewModel = JsonSerializer.DeserializeFromString<PersonalInformationViewModel>(personJsonString); ValidationResult validate = new PersonalInformationValidator().Validate(personViewModel); if (!validate.IsValid) { var errs = validate.Errors.Select(x => x.ErrorMessage); return Json(new { MessageType = "ValidateError", Content = errs }, JsonRequestBehavior.AllowGet); } }