gpt4 book ai didi

asp.net - ASP MVC 4 返回 json 复杂对象

转载 作者:行者123 更新时间:2023-12-01 11:29:31 25 4
gpt4 key购买 nike

我有这样一个类:

[serializable]
public class ComplexA{
public string A{get;set;}
public string B{get;set;}
public Foo Complex1 {get;set;}
}
[Serializable]
public class Foo{
public string Name{get;set;}
public Bar Prop1{get;set;}
}
[Serializable]
public class Bar{
public string A{get;set;}
public bool B{get;set;}
}

当创建 ComplexA 的对象并将其返回到 View 时(使用来自 jQuery 的 ajax 调用),结果我得到如下内容:

{
"A":"....",
"B":"...."
}

我正在从 BusinessLayaer 获取对象,并从调试中检查它,所有属性都有值。所以我不明白为什么不序列化整个对象。

我的操作是这样的:

[HttpPost]
public ActionResult GetData(){
var logic = new BL_Something();
ComplexA info = logic.GetData();
return Json(info);
}

所以我期待的结果是这样的:

{
"A":"...",
"B":"...",
"Complex1":{
"Name":"...",
"Prop1": {
"A":"....",
"B":"false"
}
}

最佳答案

默认情况下,MVC 使用 Microsoft 的 JavascriptSerializer类(class)。与 Json.NET 相比,我多次发现这门课的表现不佳. WebAPI 和 MVC 的 future 版本已切换到 Json.NET 作为默认序列化程序。

有很多方法可以替换引擎盖下的默认序列化程序,但需要付出很多努力。

您可以使用 Json.NET 序列化您的对象,并通过像这样更改返回值将其作为 json 返回:

return Content(JsonConvert.SerializeObject(info), "application/json");

这应该很容易测试。我相信它会解决您的序列化问题。

为方便起见,您可以像这样在 Controller 基类上放置一个操作方法:

public virtual ActionResult JsonResponse(object obj)
{
return Content(JsonConvert.SerializeObject(obj), "application/json");
}

在 Controller 中的用法:

public ActionResult GetData()
{
var info = new ComplexA
{
A = "test",
B = "BB",
Complex1 = new Foo {Name = "Ss", Prop1 = new Bar {A = "Name", B = false}}
};
return JsonResponse(info);
}

关于asp.net - ASP MVC 4 返回 json 复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34025237/

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