views:

3285

answers:

3

Duplicate: serializing-generic-xml-data-across-wcf-web-service-requests

Hi all,

I have a WCF service where Im building up a block of XML using an XmlWriter. Once complete I want to have the WCF return it as an XmlDocument.

But if I have XmlDocument in the [OperationContract] it doesnt work:

[OperationContract] XmlDocument GetNextLetter();

The WCF test utility gives:

System.Runtime.Serialization.InvalidDataContractException: Type 'System.Xml.XmlDocument' cannot be serialized.

Thanks in advance!

+1  A: 

Don't send the XMLDocument, because you can reconstruct it on the other end.

You should probably send down the string that you want, or construct a business object which can be serialized to XML and transmit that.

Have a look at XSD.exe tool with the .net framework if you have an XSD and you want to make a business object from it which can be serialized.

Spence
xsd is more XmlSerializer focused - WCF would often use DataContractSerializer...
Marc Gravell
I guess I've been tainted by legacy XML systems :(. If you're in a greenfield WCF layout then datacontract would probably be a good way to go.
Spence
+5  A: 

If you are using .Net 3.5 then you can try returning XElement instead - this implements IXmlSerializable, which is the missing ingredient needed to make it work with DataContractSerializer.

Samuel Jack
I think this is what I need. Thanks everyone!
Blaze
A: 

The DataContractSerializer can serialize XmlElement instances. So just return the DocumentElement property of your XmlDocument instance. See: MSDN.

siz