Serialization HTTPClient.PostAsync<;T>;忽略XmlMediaTypeFormatter序列化属性

Serialization HTTPClient.PostAsync<;T>;忽略XmlMediaTypeFormatter序列化属性,serialization,httpwebrequest,Serialization,Httpwebrequest,我正在使用一个现有的xsd,它看起来像这样(为了简洁而缩短): 快进。。。我正在使用HTTPClient发布到REST服务。这里的代码非常简单 var widget = new WidgetDefinition(); // do something here to hydrate widget var httpClient = new HttpClient(); return httpClient.PostAsync<WidgetDefinition>( uri, termi

我正在使用一个现有的xsd,它看起来像这样(为了简洁而缩短):

快进。。。我正在使用HTTPClient发布到REST服务。这里的代码非常简单

var widget = new WidgetDefinition();
// do something here to hydrate widget
var httpClient = new HttpClient();
return httpClient.PostAsync<WidgetDefinition>(
    uri, terminatedCall, new XmlMediaTypeFormatter());
xml看起来像:

<WidgetDefinition xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/\">
...
在发送端进行序列化时,
XmlTypeAttribute
XmlRootAttribute
属性似乎被忽略

有什么线索导致这一切吗

编辑:如果我使用XmlSerializer手动序列化它,它将遵守WidgetDefinition类上的序列化属性。我认为我的问题与传递给PostAsync调用的格式化程序有关

从这个
xmlns=\”http://schemas.datacontract.org/2004/07/\“
您的REST服务似乎配置为使用DataContractSerializer(WCF服务中的默认值),而不是XmlSerializer

您可以将服务配置为使用XmlSerializer,这至少可以让您更进一步:

来自此
xmlns=\”http://schemas.datacontract.org/2004/07/\“
您的REST服务似乎配置为使用DataContractSerializer(WCF服务中的默认值),而不是XmlSerializer

您可以将服务配置为使用XmlSerializer,这至少可以让您更进一步:

var widget = new WidgetDefinition();
// do something here to hydrate widget
var httpClient = new HttpClient();
return httpClient.PostAsync<WidgetDefinition>(
    uri, terminatedCall, new XmlMediaTypeFormatter());
request.Content.ReadAsStringAsync().Result
<WidgetDefinition xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/\">
...
<Widget xmlns:i=\"http://www.mycompany.com/Widgets\">
...