c# - ASP.NET C#,将对象返回给 Angular
问题描述
我正在为 Angular 前端编写 C# api 后端。我以前在其他项目中这样做过,以前我总是从 c# 返回一个对象,而在邮递员或 Angular 中我能够读取该对象。在邮递员中,它被整齐地格式化为 json。
例如,我曾经有一个class Person
和一个控制器PersonController
。在PersonController
,我可以有一个方法Get()
,Get 会是这样的
public Person Get() {
Person p = new Person();
...
return p;
}
我应该PersonController.Get
从 Angular 打电话,我会得到这个人。但是由于某种原因,现在我在一个新项目中这样做,而我得到的只是[Person]
——而不是可扩展的 json。
为什么是这样?
我知道我看到了差异。开发人员花时间将其作为字符串返回:
JavaScriptSerializer json = new JavaScriptSerializer()
{
MaxJsonLength = 3000;
};
strJson = json.Serialize(model);
return strJson;
但我想返回实际对象。我发现解析它使它慢得多。
编辑:
这是我的实际控制器:
public class PersonController : Controller
{
private readonly IPersonService personService;
public PersonController()
{
presonService = new PersonService();
}
public async Task<JArray> Get(int? id)
{
var model = await personService.GetInfo(id, ConnHelper.ConnectionString());
JArray a = (JArray)JToken.FromObject(model);
return a;
//return model;
}
public async Task<List<Person>> GetObject(int? id)
{
var model = await personService.GetInfo(id, ConnHelper.ConnectionString());
return model;
}
}
解决方案
因为您的控制器是普通控制器,您应该返回 Json,如下所示:
public class PersonController : Controller
{
private readonly IPersonService personService;
public PersonController()
{
presonService = new PersonService();
}
public async Task<JArray> Get(int? id)
{
var model = await personService.GetInfo(id, ConnHelper.ConnectionString());
JArray a = (JArray)JToken.FromObject(model);
return Json(a);
//return model;
}
public async Task<List<Person>> GetObject(int? id)
{
var model = await personService.GetInfo(id, ConnHelper.ConnectionString());
return Json(model);
}
}
推荐阅读
- gcc - STM32H743 微控制器 (Cortex-M7) 的链接脚本中是否使用了所有 RAM 部分?
- javascript - 伊斯坦布尔覆盖与 mocha 测试用例仅显示规范文件(测试文件)的覆盖率报告
- ios - CAGradientLayer 未应用于整个屏幕
- python - 绘制单个 XGBoost 决策树
- javascript - React 和 D3:无法读取未定义的属性“X”
- chef-infra - 厨师无法上传
- flutter - 如何在颤振中通过自生成的签名证书进行 SSL 固定?
- scikit-learn - sklearn.feature_extraction.text.CountVectorizer 手动计算
- r - 缺少没有错误的额外情节
- java - 使用 Java 中调用的方法创建进程