以对象名称返回Json格式的数据

时间:2015-11-27 09:47:07

标签: c# json rest ienumerable

为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"
      }
   ]
}

4 个答案:

答案 0 :(得分:9)

根据Boas的回答,你可以为此创建一个特定的类,或者只使用匿名类型:

return Ok(new { CountryList = list });

基本上,你需要一个具有适当属性的对象,无论是哪种方式。如果你想稍后反序列化并保持编译时检查,那么创建一个类是值得的 - 但如果你要么使用动态类型,要么消费者不会是C#代码,那么匿名类型会更简单

答案 1 :(得分:4)

那是因为你正在序列化一个列表

Yu可以创建一个具有所需名称的属性的dto,并将其序列化而不是列表

public class MyDto
{
      public List<ISimpleListEntity> CountryList {get;Set;}
}

答案 2 :(得分:1)

您只需使用匿名类型:

return Ok(new {
    CountryList = list
});

答案 3 :(得分:0)

如果您想要返回对象名称,那么最好还是返回包含该列表的模型。

class Model
{
    IEnumerable<ISimpleListEntity> CountryList { get; set; };
}

然后在您的控制器中

return Ok(new model() {CountryList= ... });