![](/img/trans.png)
[英]WCF REST is failing to deserialize class that implements IXMLSerializable
[英]WCF serialization ignores XmlRoot name with class implement IXmlSerializable
這是我的WCF服務類:
class MyService : IMyService
{
public String GetService(MyRequest request){...}
}
這是請求類:
[XmlRoot("RequestClass")]
class MyRequest : IXmlSerializable
{
public String Id {get;set;}
public String ReqContent {get;set;}
public void ReadXml(XmlReader reader)
{
using (XmlReader rr = reader.ReadSubtree())
{
Id = ...;
ReqContent = ...;
}
}
public void WriteXml(XmlWriter writer)
{
// write customize format content to the writer
}
}
使用以下XmlSerializer實例測試了MyRequest類的序列化:
StringBuilder xml = new StringBuilder();
XmlSerializer ser = new XmlSerializer(typeof(MyRequest), "");
using (XmlWriter writer = XmlWriter.Create(xml))
{
ser.Serialize(writer, req);
}
並得到如下的xml:
<RequestClass>
<Id>123</Id>
<ReqContent>...</ReqContest>
</RequestClass>
這里一切都很好。 但是,在我應用WCF服務並將請求類傳遞給服務之后,ReadXml中的xml如下所示:
<request xmlns="http://tempuri.org/">
<Id>123</Id>
<ReqContent>...</ReqContest>
<request>
WCF序列化程序替換了類的根元素,如何解決此問題?
任何想法都值得歡迎和贊賞,我已經在這個問題上困擾了幾天。
PS1:我已經閱讀了這篇文章 ,並且不知道如何解決此問題。 PS2:我不確定這是否是由我在項目中使用的ClearUsernameBinding引起的。 如果是,如何在不更改綁定的情況下進行修復?
我認為一切都在PS1中提到的帖子中進行了描述。 您應該確定您的服務是否為SOAP服務。 如果是這樣,您可以使用消息合同屬性而不是datacontract(實際上不使用)來完全控制消息合同。 如果要進行XML序列化,則應將[XmlSerializerFormat]添加到服務合同中。 請參閱DataContract XML序列化和XML屬性
對於自定義序列化,您還可以實現自己的序列化器,並使用行為將其注入WCF管道 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.