一尘不染

ASP.NET MVC 3控制器.Json方法序列化未查看DataMember名称属性

json

在我的课上,我有:

[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的效果将达到预期。

有什么事吗


阅读 322

收藏
2020-07-27

共1个答案

一尘不染

您从控制器操作(使用)返回的JsonResult操作在return Json(...)内部依赖于JavaScriptSerializer类。此类不考虑DataMember模型上的任何属性。

您可以编写一个自定义ActionResult,该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 };
}
2020-07-27