7

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.

4 Answers 4

4

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.

Sign up to request clarification or add additional context in comments.

3 Comments

This nearly works, but my json is getting wrapped in an xml root node, like so: <root>{"Id":0,"IsFinalized":false,"IsTemplate":false}</root>
Links appear to be broken.
Found links here
2

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

[DataContract(IsReference = true)]
public class Employee

For more details see. MSDN DataContractAttribute.IsReference

Comments

1

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.

2 Comments

Link is broken.
0

you can uses ScriptIgnore attribute as mentioned here:- Ignoring a field during .NET JSON serialization; similar to [XmlIgnore]? Though I am looking forward to implement something like you want, don't want to decorate lot of nested objects

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.