Add root element to response model

Solution 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 });
}

Solution 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