views:

1400

answers:

3

I'm creating a web service in WCF that returns JSON, but the DataContractJsonSerializer is balking on some circular references (which I can't remove in this particular case).

Instead, I'd like to use the Newtonsoft json library. What's the easiest way to create a custom serializer in WCF?

Note: I know I could just return a stream, but I don't want operation code aware of serialization stuff.

+2  A: 

Re pure WCF: if you control both ends of the wire (on "full" .NET), then applying a custom serializer is relatively simple - you add a behaviour inherited from DataContractSerializerOperationBehavior, and override CreateSerializer - see here (with attribute here).

However! My understanding (untested) is that a JSON-enabled WCF service won't use this route, but will apply its own serializer directly.

Marc Gravell
This nearly works, but my json is getting wrapped in an xml root node, like so:<root>{"Id":0,"IsFinalized":false,"IsTemplate":false}</root>
rogueg
+1  A: 

Very good article: XmlSerializer vs DataContractSerializer: Serialization in Wcf. There Dan Rigsby is showing different scenarios and how to make your own serializer in more detail.

The_Ghost
A: 

Set IsReference attribute of DataContract to true, it is available with .NET 3.5SP1

[DataContract(IsReference = true)]
public class Employee

For more details see. http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractattribute.isreference.aspx

Morbia