我有一个C#WCF REST服务,它允许添加书签,通过发送带有以XML格式化的书签的HTTP POST请求.我已经为服务指定了操作契约,它获取了xml并自动为我反序列化了对象.我的问题是,如果请求中的XML元素按字母顺序给出,则反序列化只能正常工作,并且不会填充任何无序元素的值.
我发现这非常令人不满意; 我认为以特定顺序构造XML的要求是不必要的,并且是一个令人头疼的问题.这是添加到服务的所有客户端的主要要求,也是调试可能存在的难题的来源.
是否可以指示WCF与XML元素顺序无关?
一些进一步的细节用于澄清目的:
我的运营合同如下:
[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "/{username}/bookmarks", ResponseFormat = WebMessageFormat.Xml)]
public void PostBookmark(string username, RestBookmark newBookmark);
Run Code Online (Sandbox Code Playgroud)
RestMessage如下所示:
[DataContract(Name = "Bookmark", Namespace = "")]
public class RestBookmark
{
[DataMember]
public string BookmarkMd5 { get; set; }
[DataMember]
public string Url { get; set; }
[DataMember]
public string UserName { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我发送以下XML消息,则只有在调用PostBookmark()时才会填充RestMessage对象的UserName属性:
<?xml version="1.0"?><Bookmark><UserName>nick.street</UserName><Url>http://www.stackoverflow.com</Url><BookmarkMd5>f184eb3347cf94f6ce5f5fc2844e3bdd</BookmarkMd5><Description>Developer Forum</Description><Title>Stack Overflow</Title></Bookmark>
Run Code Online (Sandbox Code Playgroud)
出于版本控制和性能原因,DataContractSerializer 需要严格的元素排序。
我能想到一些选择
编写一个消息检查器,以便在 dataContractSerializer 反序列化 AfterReceivedRequest 中的原始 XML 元素之前对其进行重新排序。
使用 XmlSerializer 为您提供服务。
相反,开发 HTTP 原始 XML 消息处理服务。
将对象作为字典传递(不推荐)
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |