当web api操作以xml格式返回数据时,如何在客户端反序列化数据

时间:2016-08-26 11:40:59

标签: c# xml serialization asp.net-web-api

1)第一种情况是说我的web api动作以xml格式返回数据。所以告诉我什么时候我会用httpclient调用web api动作然后如何将客户xml数据反序列化到客户端的客户类?

假设这是我的网络API动作

   [RoutePrefix("api/customer")]
    public class CustomerController : ApiController
    {
        static readonly ICustomerRepository repository = new CustomerRepository();

        [HttpGet, Route("GetAll")]
        public HttpResponseMessage GetAllCustomers()
        {
            //return new Response(true, "SUCCESS", repository.GetAll());
            return Request.CreateResponse(HttpStatusCode.OK, new Response(true, "SUCCESS", repository.GetAll()));
        }

        [HttpGet, Route("GetByID/{customerID}")]
        public Response GetCustomer(string customerID)
        {
            Customer customer = repository.Get(customerID);
            if (customer == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return new Response(true, "SUCCESS", customer);
            //return Request.CreateResponse(HttpStatusCode.OK, response);
        }

        [HttpGet, Route("GetByCountryName/{country}")]
        public IEnumerable<Customer> GetCustomersByCountry(string country)
        {
            return repository.GetAll().Where(
                c => string.Equals(c.Country, country, StringComparison.OrdinalIgnoreCase));
        }

        public HttpResponseMessage PostCustomer(Customer customer)
        {
            customer = repository.Add(customer);
            var response = Request.CreateResponse<Customer>(HttpStatusCode.Created, customer);

            string uri = Url.Link("DefaultApi", new { customerID = customer.CustomerID });
            response.Headers.Location = new Uri(uri);
            return response;
        }

        public void PutProduct(string customerID, Customer customer)
        {
            customer.CustomerID = customerID;
            if (!repository.Update(customer))
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
        }

        public void DeleteProduct(string customerID)
        {
            Customer customer = repository.Get(customerID);
            if (customer == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            repository.Remove(customerID);
        }
    }

public class Response
    {
        bool IsSuccess = false;
        string Message;
        object ResponseData;

        public Response(bool status, string message, object data)
        {
            IsSuccess = status;
            Message = message;
            ResponseData = data;
        }
    }

   public class Customer
    {
        public string CustomerID { get; set; }
        public string CompanyName { get; set; }
        public string ContactName { get; set; }
        public string ContactTitle { get; set; }

        public string Address { get; set; }

        public string Region { get; set; }

        public string PostalCode { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Phone { get; set; }
        public string Fax { get; set; }
    }

现在这样打电话

    var baseAddress = "http://localhost:8010/api/customer/GetAll";
    using (var client = new HttpClient())
    {
        using (var response = await client.GetAsync(baseAddress))
        {
            if (response.IsSuccessStatusCode)
            {


            }
            else
            {
                Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
            }
        }
    } 

response.IsSuccessStatusCode为真时,请告诉我如何阅读响应并从响应类中提取客户数据。

给我一​​些HttpClient的示例代码,向我展示如何deserialize响应和客户类。请包括我可以使用的示例代码。

给我示例客户端代码,它向我展示如何从响应中保存xml并将其反序列化为客户类。感谢

1 个答案:

答案 0 :(得分:0)

¿你的意思是这样的吗?

var baseAddress = "http://localhost:8010/api/customer/GetAll";
using (var client = new HttpClient())
{
    using (var response = await client.GetAsync(baseAddress))
    {
        if (response.IsSuccessStatusCode)
        {
              using (HttpContent content = response.Content)
              {
                  string result = await content.ReadAsStringAsync();
                  var newCustomer = (customer)serializer.Deserialize(result);
              }
        }
        else
        {
            Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
        }
    }
}