C# HttpClient未正确序列化XML
调用HttpClient的扩展方法C# HttpClient未正确序列化XML,c#,.net,task-parallel-library,async-await,dotnet-httpclient,C#,.net,Task Parallel Library,Async Await,Dotnet Httpclient,调用HttpClient的扩展方法PostAsXmlAsync时,它会忽略类上的XmlRootAttribute。这种行为是一种错误吗 测试 [Serializable] [XmlRoot("record")] class Account { [XmlElement("account-id")] public int ID { get; set } } var client = new HttpClient(); await client.PostAsXmlAsync(ur
PostAsXmlAsync
时,它会忽略类上的XmlRootAttribute
。这种行为是一种错误吗
测试
[Serializable]
[XmlRoot("record")]
class Account
{
[XmlElement("account-id")]
public int ID { get; set }
}
var client = new HttpClient();
await client.PostAsXmlAsync(url, new Account())
查看,我们可以看到它使用XmlMediaTypeFormatter
,它在内部使用DataContractSerializer
和而不是XmlSerializer
。前者不尊重XmlRootAttribute
:
public static Task<HttpResponseMessage> PostAsXmlAsync<T>(this HttpClient client, Uri requestUri, T value, CancellationToken cancellationToken)
{
return client.PostAsync(requestUri, value, new XmlMediaTypeFormatter(),
cancellationToken);
}
你又发了同样的问题吗。。2014年8月11日或类似日期?您还知道调用client.PostAsXMLAsync..时的url是什么吗。。?如果是这样的话,就用实际的http url替换url,然后试着这样做..不同的问题-我现在使用的是基于属性的序列化。当使用正确的URL时,我也会遇到同样的错误。您可以添加由
PostAsXmlAsync
生成的XML吗?看起来您缺少了一些东西。请尝试此链接。它似乎更符合我认为您正在尝试的操作。。
public static class HttpExtensions
{
public static Task<HttpResponseMessage> PostAsXmlWithSerializerAsync<T>(this HttpClient client, Uri requestUri, T value, CancellationToken cancellationToken)
{
return client.PostAsync(requestUri, value,
new XmlMediaTypeFormatter { UseXmlSerializer = true },
cancellationToken);
}
}