永发信息网

.NET MVC 下如何设置属性序列化名称呢?

答案:2  悬赏:0  手机版
解决时间 2021-04-06 12:02
  • 提问者网友:溺爱和你
  • 2021-04-05 19:36
使用Json.net的话,属性CodeName可以使用[JsonProperty("codeName")]的特性,而Json(result, JsonRequestBehavior.AllowGet);返回的JsonResult序列化后却不是。
尝试使用[DataMember(Name = "codeName")],也无法序列化为codeName。

同样不能使用[IgnoreDataMember]特性来标记非序列项,似乎内部并不检测这类标记。
最佳答案
  • 五星知识达人网友:慢性怪人
  • 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序列化的方法替换下
全部回答
  • 1楼网友:洎扰庸人
  • 2021-04-05 21:16
jsonignoreattribute是json.net中的属性吧,jsonresult用的是javascriptserializer序列化的,所以那个属性没意义,除非你自己用json.net实现自己的jsonresult,或者在初始化model对象后,把不想序列化的属性值设为空或null,还有一个办法就是定义专用的view model类,只定义需要的属性。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯