我有一个WCF服务,我使用XmlWriter构建一个XML块。一旦完成,我想让WCF将其作为XmlDocument返回。
但是如果我在[OperationContract]中有XmlDocument它不起作用:
[OperationContract]
XmlDocument GetNextLetter();
WCF测试实用程序提供:
System.Runtime.Serialization.InvalidDataContractException:类型'System.Xml.XmlDocument'无法序列化。
答案 0 :(得分:13)
将xmlserializer附加到您在业务合同中所做的事情
[OperationContract,XmlSerializerFormat]
XmlDocument GetNextLetter();
这样就可以了!
答案 1 :(得分:10)
如果您使用的是.Net 3.5,那么您可以尝试返回XElement - 这会实现IXmlSerializable,这是使其与DataContractSerializer一起使用所需的缺失成分。
答案 2 :(得分:3)
DataContractSerializer可以序列化XmlElement实例。所以只需返回XmlDocument实例的DocumentElement属性。请参阅:MSDN。
答案 3 :(得分:2)
不要发送XMLDocument,因为你可以在另一端重建它。
你应该发送你想要的字符串,或构建一个可以序列化为XML并传输它的业务对象。
如果您有一个XSD并且想要从中生成一个可以序列化的业务对象,请查看带有.net框架的XSD.exe工具。