JSON响应自定义.NET Core Web API

时间:2018-11-27 12:01:26

标签: c# .net json

我正在使用.net core 2.2制作webapi。我对.net框架还是陌生的,到目前为止,我正在使用基于JavaScript的框架,例如nodejs expressjs。

在nodejs中自定义JSON响应很容易。您可以举例说明如何使用.NET Core 2.2 WebApi自定义JSON响应吗?只要指出正确的方向即可。

让我举个例子,

C#用户模型

public class User {
    int id {get;set;}
    string name {get;set;}
    string username {get;set;}
    string password {get;set;}
}

默认API获取响应。

public ActionResult<IEnumerable<User>> GetAll()

Json:

[
    {
        "id":1,
        "name": "John Doe",
        "username": "john",
        "password": "AH7B302Iapxf7EFzZVW0/kJDuf/I3pDPkQ42IxBTakA="
    },
    {   
        "id":2,
        "name": "Jane Doe",
        "username": "jane",
        "password": "AH7B302Iapxf7EFzZVW0/kJDuf/I3pDPkQ42IxBTakA="
    }
]

我需要像这样自定义输出。

{
    "statuscode": 200,
    "count"     : 2,
    "data"      : 

    [
        {
            "name": "John Doe",
            "username": "john",
        },
        {
            "name": "Jane Doe",
            "username": "jane",
        }
    ]
}

2 个答案:

答案 0 :(得分:3)

我猜您正在为您的api请求一个通用的返回对象,如果是这样,则需要按以下方式定义一个返回对象,

您的返回对象模型,考虑到您的所有实体都具有基本类型IEntityBaseEntity

public class Result<T> where T: IEntity
{
    public int StatusCode { get; set; }
    public int Count { get; set; }
    public IEnumerable<T> Data { get; set; }
}

还有一个示例操作方法,

public IActionResult<IEnumerable<User>> GetAll()
{
    var list = _userRepository.GetAll();
    var model = new Result<User>
    {
        StatusCode = 200,
        Count = list.Count,
        Data = list
    };

    return Ok(model);
}

答案 1 :(得分:3)

您可以使用匿名对象,如果您不想为每个结果类型定义一个单独的类,这将很方便:

public ActionResult<object> GetAll()
{
    var list = _userRepository.GetAll(); // <-- if this is not (yet) an Array or a List, then force single evaluation by adding .ToArray() or .ToList()
    var model = new
    {
        statuscode = 200,
        count = list.Count, // or .Length if list is an Array
        data = list.Select(x => new { name = x.name, username = x.userName })
    };
    return Ok(model);
}