gpt4 book ai didi

asp.net-mvc - ASP.NET MVC3 Controller .Json 方法序列化不考虑 DataMember Name 属性

转载 作者:行者123 更新时间:2023-12-02 09:15:57 26 4
gpt4 key购买 nike

在我的类里面,我有:

[DataMember(Name = "jsonMemberName", EmitDefaultValue = false, 
IsRequired = false)]
public List<string> Member { get; set; }

通过重新运行 System.Web.Mvc.JsonResult 的 Controller 的 Json(obj) 传递对象后:我得到了序列化的 json: {Member:...} 但不是 {jsonMemberName:...},所以它没有不要看 DataMember(Name = "jsonMemberName")。

如果我使用 System.Runtime.Serialization.Json 的序列化,一切都会按预期正常工作。

可能出了什么问题?

最佳答案

JsonResult您从 Controller 操作返回的操作(使用 return Json(...))在内部依赖于 JavaScriptSerializer类(class)。此类不考虑模型上的任何 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);
}
}
}

然后在你的 Controller 操作中:

public ActionResult Foo()
{
var model = ...
return new MyJsonResult { Data = model };
}

关于asp.net-mvc - ASP.NET MVC3 Controller .Json 方法序列化不考虑 DataMember Name 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6020889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com