gpt4 book ai didi

c# - 在 ASP.NET MVC 中,在 Controller 的操作方法之前或之中反序列化 JSON

转载 作者:IT王子 更新时间:2023-10-29 04:37:12 27 4
gpt4 key购买 nike

我正在开发一个将 JSON 对象(使用 jQuery Post 方法)发布到服务器端的网站。

{ 
"ID" : 1,
"FullName" : {
"FirstName" : "John",
"LastName" : "Smith"
}
}

同时,我在服务器端为这个数据结构写了类。

public class User
{
public int ID { get; set; }
public Name FullName { get; set;}
}

public class Name
{
public string FirstName { get; set; }
public string LastName { get; set; }
}

当我在 Controller 类中使用以下代码运行网站时,FullName 属性不会被反序列化。我究竟做错了什么?

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Submit(User user)
{
// At this point, user.FullName is NULL.

return View();
}

最佳答案

我通过实现操作过滤器解决了我的问题;下面提供了代码示例。从研究中,我了解到还有另一种解决方案,即模型绑定(bind)器,如上文所述。takepara。但我真的不知道这两种方法的优缺点。

感谢 Steve Gentile 的 blog post对于这个解决方案。

public class JsonFilter : ActionFilterAttribute
{
public string Parameter { get; set; }
public Type JsonDataType { get; set; }

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
{
string inputContent;
using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
{
inputContent = sr.ReadToEnd();
}

var result = JsonConvert.DeserializeObject(inputContent, JsonDataType);
filterContext.ActionParameters[Parameter] = result;
}
}
}

[AcceptVerbs(HttpVerbs.Post)]
[JsonFilter(Parameter="user", JsonDataType=typeof(User))]
public ActionResult Submit(User user)
{
// user object is deserialized properly prior to execution of Submit() function

return View();
}

关于c# - 在 ASP.NET MVC 中,在 Controller 的操作方法之前或之中反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1474896/

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