简体   繁体   中英

WCF REST Service - Unable to return list of objects

I created a WCF Web Service application which exposes a REST service. I would like this service to return a generic response with a Data and Status section (see HttpResponse class below). The HttpResponse has Data member which is a List of objects. Depending which REST service call is executed, I will populate Data with a list of different types of objects.

The problem I have is that if the Data member is a list of objects, the web service crashes. If it make it a specific class, I get a valid response.

How can I solve this issue?

Thanks!

  public class HttpStatus
    {
        public int StatusCode = (int)StatusCodeEnum.SUCCESS;
        public string UserMessage = "";
        public string InternalMessage = "";
        public string LinkedList = "";

    }

    public class HttpResponse
    {
        private List<object> _data { set; get; }
        private HttpStatus _status { set; get; }

        public HttpResponse()
        {
            _data = null;
            _status = new HttpStatus();
        }

        public List<object> Data
        {
            get
            {
                return _data;
            }
            set
            {
                if (value != null) _data = value;
            }
        }

        public HttpStatus Status
        {
            get
            {
                return _status;
            }
            set
            {
                if (value != null) _status = value;
            }
        }
    }

        [WebInvoke(
            Method = "GET",
            UriTemplate = "MyEntity",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare)]
        [OperationContract]
        HttpResponse GetAllEntities();



        public HttpResponse GetAllEntities()
        {
            // Create Response
            HttpResponse response = new HttpResponse();

            try{
                // Set the data
                response.Data = GetMyEntities();
                response.Status = 1;
            }
            catch(Exception ex)
            {
                Debug.WriteLine("Exception: "+ex.Message);
                response.Status.StatusCode = (int)StatusCodeEnum.FAIL;
                response.Status.InternalMessage = ex.Message;
                response.Status.UserMessage = Constants.GENERIC_USER_ERROR;
            }
            return response;
        }

You could use

public class HttpResponse<T> where T : class
{
    private List<T> _data { set; get; }
    private HttpStatus _status { set; get; }

    public HttpResponse()
    {
        _data = null;
        _status = new HttpStatus();
    }

    public List<T> Data
    {
        get
        {
            return _data;
        }
        set
        {
            if (value != null) _data = value;
        }
    }

    public HttpStatus Status
    {
        get
        {
            return _status;
        }
        set
        {
            if (value != null) _status = value;
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM