public int Status { get; set; }
public string Message { get; set; }
public interface IApiResponse<out T>
public class ApiResponse<T> : ApiResponse, IApiResponse<T>
public T Result { get; set; }
public string Text { get; set; }
public static void Main()
object data = new ApiResponse<MyDTO> { Result = new MyDTO { Text = "test" } };
var payload = ((IApiResponse<object>)data).Result;
Console.WriteLine(JsonConvert.SerializeObject(payload));
var serialized = JsonConvert.SerializeObject(data);
var deserialized = (ApiResponse<MyDTO>)JsonConvert.DeserializeObject(serialized, typeof(ApiResponse<MyDTO>));
Console.WriteLine(deserialized.Result.GetType());
Console.WriteLine(JsonConvert.SerializeObject(deserialized.Result));