ОБНОВЛЕНИЕ 10/19/2010 Я знаю, что я задал этот вопрос некоторое время назад, но обходные пути, показанные в этих ответах, вряд ли удовлетворительны, и это по-прежнему является общей проблемой для многих. WCF просто не является гибким. Я начал свою собственную библиотеку С# с открытым исходным кодом для создания служб REST без WCF. Проверьте restcake.net или rest.codeplex.com для получения информации об этом библиотека. END UPDATE
ОБНОВЛЕНИЕ 8/2/2012 ASP.NET Web API (ранее WCF Web API, замена REST WCF) использует Json.NET по умолчанию END UPDATE
 DataContractJsonSerializer не может обрабатывать многие сценарии, в которых Json.Net обрабатывает только штраф при правильной настройке (в частности, циклов).
Метод службы может либо возвращать определенный тип объекта (в этом случае DTO), и в этом случае используется DataContractJsonSerializer, или я могу заставить метод вернуть строку, а сама сериализация с Json.Net. Проблема в том, что когда я возвращаю json-строку в отличие от объекта, json, который отправляется клиенту, заключен в кавычки.
Используя DataContractJsonSerializer, возвращая определенный тип объекта, ответ будет следующим: 
 {"Message":"Hello World"}
Используя Json.Net для возврата строки json, ответ будет следующим: 
 "{\"Message\":\"Hello World\"}"
Я не хочу иметь для eval() или JSON.parse() результат на клиенте, и это то, что мне нужно было бы сделать, если json вернется как строка, завернутая в кавычки. Я понимаю, что поведение правильное; это просто не то, что я хочу/нуждаюсь. Мне нужен сырой json; поведение, когда возвращаемый тип метода службы является объектом, а не строкой.
Итак, как я могу вернуть метод методу типа объекта, но не использовать DataContractJsonSerializer? Как я могу сказать, чтобы вместо этого использовать сериализатор Json.Net?
Или, может ли кто-нибудь непосредственно написать ответный поток? Значит, я могу просто вернуть сырого json? Без кавычек обертывания?
Вот мой надуманный пример, для справки:
[DataContract]
public class SimpleMessage
{
    [DataMember]
    public string Message { get; set; }
}
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class PersonService
{
    // uses DataContractJsonSerializer
    // returns {"Message":"Hello World"}
    [WebGet(UriTemplate = "helloObject")]
    public SimpleMessage SayHelloObject()
    {
        return new SimpleMessage("Hello World");
    }
    // uses Json.Net serialization, to return a json string
    // returns "{\"Message\":\"Hello World\"}"
    [WebGet(UriTemplate = "helloString")]
    public string SayHelloString()
    {
        SimpleMessage message = new SimpleMessage() { Message = "Hello World" };
        string json = JsonConvert.Serialize(message);
        return json;
    }
    // I need a mix of the two.  Return an object type, but use the Json.Net serializer.
}
