使用XML时,ASP.NET Web API为对象返回NULL

时间:2016-11-22 12:02:32

标签: asp.net-web-api

我试图按照我发现的说明进行操作,但它仍无效。

我有以下课程

public class TodoItem
{        
    public int Id { get; set; }        
    public string Name { get; set; }        
    public bool IsComplete { get; set; }
    public TodoItem() { }
}

我的服务器有以下POST方法

public IHttpActionResult Post([FromBody]TodoItem item)
    {
        if (item != null)
        {
            TodoRepository.Current.Add(item);
            return Ok(item);
        }
        return BadRequest("Object is null");
    }

在我的WebApiConfig.cs中,我添加了以下行

config.Formatters.XmlFormatter.UseXmlSerializer = true;

在客户端,我使用HttpClient,如下所示:

var postTask = client.PostAsXmlAsync<TodoItem>("", item);

服务器上的My Post方法接收项对象的null。

2 个答案:

答案 0 :(得分:0)

谢谢,在Nilesh Thakkar的帮助下解决了这个问题

我添加了以下扩展方法

public static class HttpExtensions
{
    public static Task<HttpResponseMessage> PostAsXmlWithSerializerAsync<T>(this HttpClient client, string requestUri, T value)
    {
        return client.PostAsync(requestUri, value,
                      new XmlMediaTypeFormatter { UseXmlSerializer = true });   
    }
}

来自HttpClient的调用现在看起来

var postTask = client.PostAsXmlWithSerializerAsync<TodoItem>("", item);

答案 1 :(得分:0)

我相信this答案也可能有用。 PostAsXmlAsync使用XmlMediaTypeFormatter,该XmlMediaTypeFormatter内部使用DataContractSerializer,后者从DataContract以字母顺序(XmlSerializer-定义的顺序)创建XML。 因此,在DataMemberAttribute类中使用“订单参数”可以帮助解决PostAsXmlAsync-deserialization-issue:

[DataMember(Order = index)]