I'm using Retrofit 2 and Gson and I'm having trouble deserializing responses from my API. Here's my scenario:
I have a model object named Employee that has three fields: id, name, age.
I have an API that returns a singular Employee object like this:
{
    "status": "success",
    "code": 200,
    "data": {
        "id": "123",
        "id_to_name": {
            "123" : "John Doe"
        },
        "id_to_age": {
            "123" : 30
        }
    }
}
And a list of Employee objects like this:
{
    "status": "success",
    "code": 200,
    "data": [
        {
            "id": "123",
            "id_to_name": {
                "123" : "John Doe"
            },
            "id_to_age": {
                "123" : 30
            }
        },
        {
            "id": "456",
            "id_to_name": {
                "456" : "Jane Smith"
            },
            "id_to_age": {
                "456" : 35
            }
        },
    ]
}
There are three main things to consider here:
- API responses return in a generic wrapper, with the important part inside of the 
datafield. - The API returns objects in a format that doesn't directly correspond to the fields on the model (for example, the value taken from 
id_to_ageneeds be mapped to theagefield on the model) - The 
datafield in the API response can be a singular object, or a list of objects. 
How do I implement deserialization with Gson such that it handles these three cases elegantly? 
Ideally, I'd prefer to do this entirely with TypeAdapter or TypeAdapterFactory instead of paying the performance penalty of JsonDeserializer. Ultimately, I want to end up with an instance of Employee or List<Employee> such that it satisfies this interface:
public interface EmployeeService {
    @GET("/v1/employees/{employee_id}")
    Observable<Employee> getEmployee(@Path("employee_id") String employeeId);
    @GET("/v1/employees")
    Observable<List<Employee>> getEmployees();
}
This earlier question I posted discusses my first attempt at this, but it fails to consider a few of the gotchas mentioned above: Using Retrofit and RxJava, how do I deserialize JSON when it doesn't map directly to a model object?