[英]How Do I convert my array of objects into JSON object in C# (.net core)
我正在使用MVC模式在.Net Core 2.2中工作。 我有一个Web-API控制器,在其中使用经典的CRUD方法创建了一些端点。
现在,所有内容都可以编译,并且在调试解决方案时,我得到一个包含几个JSON格式对象的数组-但是系统将其输出视为数组,而不是JSON。
现在,我希望此数组成为JSON。
我已经看过了: https : //www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JObject.htm
我的原始方法如下所示(在控制器中):
[HttpGet("/ListAllItems")]
public async Task<IEnumerable<DtoModel>> ListAllItemsFromDb()
{
return await _dbProvider.ListAllItemsAsync();
}
并给出了以下输出:
[{"id": "GUID-STRING", "itemName": "foo"}, {"id": "GUID-STRING2", "itemName": "bar"}]
//My frontend did not recognize this as a JSON, since it is an array, and threw an exception
所以我在控制器中尝试了这个
[HttpGet("/ListAllItems")]
public async Task<JObject> ListAllItemsFromDb()
{
var result = await _dbProvider.ListAllItemsAsync();
string output = result.ToString();
string json = JsonConvert.SerializeObject(output);
JObject obj = JObject.Parse(json);
return obj;
}
当我运行此代码时,我的错误消息指出:“ JsonReaderException:从JsonReader读取JObject时出错。当前的JsonReader项不是对象:字符串。路径,第1行,位置60。”
如何将对象数组转换为JSON对象?
您的前端可能会拒绝JSON数组,因为它们存在一些安全问题。 微妙的JSON漏洞剖析一文对此进行了解释。 但我认为它不再适用,请参阅此以及此堆栈溢出问题
但是,您可以创建包装器对象,以避免返回顶级JSON数组:
public class Wrapper<T> {
public T Data {get; set;}
}
然后在您的控制器中:
[HttpGet("/ListAllItems")]
public async Task<Wrapper<IEnumerable<DtoModel>>> ListAllItemsFromDb()
{
return new Wrapper<<IEnumerable<DtoModel>>() {
Data = await _dbProvider.ListAllItemsAsync()
};
}
MVC基础结构将返回JSON结果,如下所示:
{
Value: [{"id": "GUID-STRING", "itemName": "foo"}, {"id": "GUID-STRING2", "itemName": "bar"}]
}
这应该使您的前端感到高兴。
JsonConvert将毫无问题地转换您的列表-在IEnumerable<DtoObject>
上调用ToString()
可能是您的问题。
将列表传递给JsonConvert,它将正确解析。
var result = await _dbProvider.ListAllItemsAsync();
string json = JsonConvert.SerializeObject(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.