skip to Main Content

I’m writing an ASP.NET Core API, which should follow an existing format.

The response should always start with a data element in the json

{
    "data": {
        "batch_id": null,
        "created_at": "2019-01-29T16:58:04+00:00",
        "current_operation": null,
        "description": "This watch has a new name",
        "model": {
            "brand_id": null,
            "created_at": null,
            ...
        }
    }
}

I created a class Batch which contains all the properties that we see, and my controller is taking care of serialize it in the background.

public class Batch
{
     [JsonProperty("label")]
     public string Label { get; set; }

     [JsonProperty("serial_number")]
     public string SerialNumber { get; set; }
[HttpGet("{id}")]
public ActionResult<Batch> Get(string id)
{
     ...
     return batch;
}

Is there a way to write something so that every payload has to start with a data property?

I would like to avoid writing a class DataWrapper<T> that I have to use for every response.

2

Answers


  1. You could just use an anonymous object to wrap the response from the controller:

    [HttpGet("{id}")]
    public ActionResult<Batch> Get(string id)
    {
        ...
        return Ok(new { data = batch });
    }
    
    Login or Signup to reply.
  2. You can use GenericClass

    public class GenericResponseClass<T>{
        public T data;
    }
    

    then you can pass your batch(or any other) class to GenericResposneClass just like

    public class Batch
    {
         [JsonProperty("label")]
         public string Label { get; set; }
    
         [JsonProperty("serial_number")]
         public string SerialNumber { get; set; }
    }
    
    GenericResponseClass<Batch> response = new GenericResponseClass<Batch>();
    Batch batch = new Batch();
    batch.Label = "New Label";
    batch.SerialNumber = "Serial Number";
    response.data = batch;
    

    then pass/serialize your response

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search