using System.Collections;
using System.Collections.Generic;
public static void Main()
var response = new RestResponse<ResponseData>() {
Data = new ResponseData() {
reply = new DerivedReply() {
public interface IReply {
public class BaseReply : IReply {
public Error error {get; set;}
public class DerivedReply : BaseReply {
public string AdditionalData{get; set;}
public interface IResponseData {
public class ResponseData : IResponseData
public DerivedReply reply {get; set;}
IReply IResponseData.reply {get { return this.reply;}}
public interface IRestResponse
public interface IRestResponse<T> : IRestResponse
public class RestResponse<T> : IRestResponse<T>
public static void Log(IRestResponse response)
var data = (response as IRestResponse<IResponseData>).Data;
Console.WriteLine(data.ToString());