使用Json.net的话,属性CodeName可以使用[JsonProperty("codeName")]的特性,而Json(result, JsonRequestBehavior.AllowGet);返回的JsonResult序列化后却不是。
尝试使用[DataMember(Name = "codeName")],也无法序列化为codeName。
同样不能使用[IgnoreDataMember]特性来标记非序列项,似乎内部并不检测这类标记。
.NET MVC 下如何设置属性序列化名称呢?
答案:2 悬赏:0 手机版
解决时间 2021-04-06 12:02
- 提问者网友:溺爱和你
- 2021-04-05 19:36
最佳答案
- 五星知识达人网友:慢性怪人
- 2021-04-05 19:52
查看JsonResult的源码就知道了,内部使用的是JavaScriptSerializer来序列化
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(MvcResources.JsonRequest_GetNotAllowed);
HttpResponseBase 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)
return;
JavaScriptSerializer scriptSerializer = new JavaScriptSerializer();
if (this.MaxJsonLength.HasValue)
scriptSerializer.MaxJsonLength = this.MaxJsonLength.Value;
if (this.RecursionLimit.HasValue)
scriptSerializer.RecursionLimit = this.RecursionLimit.Value;
response.Write(scriptSerializer.Serialize(this.Data));
}你可以考虑自己重写啊,把JavaScriptSerializer序列化的方法替换下
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(MvcResources.JsonRequest_GetNotAllowed);
HttpResponseBase 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)
return;
JavaScriptSerializer scriptSerializer = new JavaScriptSerializer();
if (this.MaxJsonLength.HasValue)
scriptSerializer.MaxJsonLength = this.MaxJsonLength.Value;
if (this.RecursionLimit.HasValue)
scriptSerializer.RecursionLimit = this.RecursionLimit.Value;
response.Write(scriptSerializer.Serialize(this.Data));
}你可以考虑自己重写啊,把JavaScriptSerializer序列化的方法替换下
全部回答
- 1楼网友:洎扰庸人
- 2021-04-05 21:16
jsonignoreattribute是json.net中的属性吧,jsonresult用的是javascriptserializer序列化的,所以那个属性没意义,除非你自己用json.net实现自己的jsonresult,或者在初始化model对象后,把不想序列化的属性值设为空或null,还有一个办法就是定义专用的view model类,只定义需要的属性。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯