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

Asp.net web api 使用XML时,ASP.NET Web API为对象返回NULL,asp.net-web-api,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 IHttpActionRes

我试着按照我找到的说明去做,但还是不行

我有以下课程

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);
var poststask=client.PostAsXmlAsync(“,item”);

服务器上我的Post方法接收到item对象的null。

谢谢,在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 });   
    }
}
公共静态类HttpExtensions
{
公共静态任务PostAsXmlWithSerializerAsync(此HttpClient客户端,字符串requestUri,T值)
{
返回client.PostAsync(requestUri,值,
新的XmlMediaTypeFormatter{UseXmlSerializer=true});
}
}
来自HttpClient的调用现在看起来

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

谢谢,在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 });   
    }
}
公共静态类HttpExtensions
{
公共静态任务PostAsXmlWithSerializerAsync(此HttpClient客户端,字符串requestUri,T值)
{
返回client.PostAsync(requestUri,值,
新的XmlMediaTypeFormatter{UseXmlSerializer=true});
}
}
来自HttpClient的调用现在看起来

var postTask = client.PostAsXmlWithSerializerAsync<TodoItem>("", item);
var poststask=client.PostAsXmlWithSerializerAsync(“,item”);
我相信这个答案也很有用。PostAsXmlAsync使用XmlMediaTypeFormatter,它在内部使用DataContractSerializer,DataContractSerializer按字母顺序(XmlSerializer-按定义的顺序)从DataContract创建XML。 因此,在DataMemberAttribute类中使用“Order Parameter”有助于解决PostAsXmlAsync反序列化问题:

[DataMember(Order=index)]

我相信这个答案也很有用。PostAsXmlAsync使用XmlMediaTypeFormatter,它在内部使用DataContractSerializer,DataContractSerializer按字母顺序(XmlSerializer-按定义的顺序)从DataContract创建XML。 因此,在DataMemberAttribute类中使用“Order Parameter”有助于解决PostAsXmlAsync反序列化问题:


[DataMember(Order=index)]

我在您的通话中看不到url。e、 g
var respone=wait-httpClient.PostAsXmlAsync(requestUri,Item)如何调用方法?URL设置如下
client.BaseAddress=newURI(“http://localhost:5342/api/todos/");当我使用
poststask=client.PostAsJsonAsync(“,item”)时,它工作得非常好var respone=wait-httpClient.PostAsXmlAsync(requestUri,Item)如何调用方法?URL设置如下
client.BaseAddress=newURI(“http://localhost:5342/api/todos/");当我使用
poststask=client.PostAsJsonAsync(“,item”)时,它工作得非常好