以Json格式返回带有对象名称的数据
本文关键字:数据 对象 Json 格式 返回 | 更新日期: 2023-09-27 18:24:38
为Web API 2编写一个简单函数,返回国家列表。它返回有效的Json格式,但不包含数组/对象名称。我有点难以理解这是如何实现的?
这是我的C#代码:
[Route("Constants/CountryList")]
[HttpGet]
public IHttpActionResult GetCountryList()
{
IEnumerable<ISimpleListEntity> list = new CountryStore().SimpleSortedListByName();
if (list == null || !list.Any())
{
return NotFound();
}
return Ok(list);
}
ISimpleListEntity接口代码在这里。
public interface ISimpleListEntity
{
int Id { get; set; }
string Name { get; set; }
}
此服务返回以下Json输出(没有对象/数组名称):
[
{
"Id":1,
"Name":"[Select]"
},
{
"Id":4,
"Name":"India"
},
{
"Id":3,
"Name":"Singapore"
},
{
"Id":2,
"Name":"United Arab Emirates"
}
]
但是,我正在努力实现以下Json格式(带有名为"CountryList"的对象/数组名称):
{
"CountryList":[
{
"Id":1,
"Name":"[Select]"
},
{
"Id":4,
"Name":"India"
},
{
"Id":3,
"Name":"Singapore"
},
{
"Id":2,
"Name":"United Arab Emirates"
}
]
}
根据Boas的回答,您可以为此创建一个特定的类,也可以只使用匿名类型:
return Ok(new { CountryList = list });
基本上,您需要一个具有适当属性的对象。如果你想稍后反序列化并保持编译时检查,那么创建一个类是值得的——但如果你使用的是动态类型,或者使用者无论如何都不是C#代码,那么匿名类型会更简单。
这是因为您正在序列化一个列表
Yu可以创建一个具有所需名称的属性的dto,并将其序列化以代替列表
public class MyDto
{
public List<ISimpleListEntity> CountryList {get;Set;}
}
您可以简单地使用匿名类型:
return Ok(new {
CountryList = list
});
如果您也想返回对象名称,那么最好返回一个包含该列表的模型。
class Model
{
IEnumerable<ISimpleListEntity> CountryList { get; set; };
}
然后在你的控制器
return Ok(new model() {CountryList= ... });