我试图按照我发现的说明进行操作,但它仍无效。
我有以下课程
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。
答案 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)]