在我的课上,我有:
[DataMember(Name = "jsonMemberName", EmitDefaultValue = false, IsRequired = false)] public List<string> Member { get; set; }
在通过重新运行System.Web.Mvc.JsonResult的控制器的Json(obj)传递对象之后:我已经序列化了json:{Member:…}但没有{jsonMemberName:…},所以它看起来不在DataMember(Name =“ jsonMemberName”)。
如果我使用System.Runtime.Serialization.Json的序列化,everithing的效果将达到预期。
有什么事吗
您从控制器操作(使用)返回的JsonResult操作在return Json(...)内部依赖于JavaScriptSerializer类。此类不考虑DataMember模型上的任何属性。
return Json(...)
DataMember
您可以编写一个自定义ActionResult,该System.Runtime.Serialization.Json名称在名称空间中使用序列化程序。
System.Runtime.Serialization.Json
例如:
public class MyJsonResult : JsonResult { public override void ExecuteResult(ControllerContext context) { var response = context.HttpContext.Response; if (!string.IsNullOrEmpty(ContentType)) { response.ContentType = ContentType; } else { response.ContentType = "application/json"; } if (ContentEncoding != null) { response.ContentEncoding = this.ContentEncoding; } if (Data != null) { var serializer = new DataContractJsonSerializer(Data.GetType()); serializer.WriteObject(response.OutputStream, Data); } } }
然后在您的控制器操作中:
public ActionResult Foo() { var model = ... return new MyJsonResult { Data = model }; }