2009-06-08 18 views
7

Tworzę serwis WWW w WCF, który zwraca JSON, ale obiekt DataContractJsonSerializer blokuje pewne odwołania cykliczne (których nie mogę usunąć w tym konkretnym przypadku).Niestandardowy serializer WCF

Zamiast tego chciałbym użyć biblioteki json Newtonów. Jaki jest najłatwiejszy sposób utworzenia niestandardowego serializera w WCF?

Uwaga: Wiem, że mogę po prostu zwrócić strumień, ale nie chcę, aby kod operacji był świadomy rzeczy związanych z serializacją.

Odpowiedz

4

Re czysty WCF: jeśli kontrolować oba końce drutu (na „full” .NET), a następnie stosując niestandardowe serializatora jest stosunkowo prosta - dodaj zachowanie odziedziczoną DataContractSerializerOperationBehavior i zastąpić CreateSerializer - patrz here (z atrybutem here).

Jednak! Moja niezmieniona interpretacja jest taka, że ​​usługa WCF z włączoną obsługą JSON nie będzie korzystać z tej trasy, ale bezpośrednio zastosuje własny serializator.

+0

To prawie działa, ale mój json jest pakowany w główny węzeł xml, tak jak: {"Id": 0, "IsFinalized": false, "IsTemplate": false} rogueg

+0

Linki wydają się być uszkodzone. – Adrian773

2

Ustaw atrybut IsReference z DataContract true, jest on dostępny z .NET 3.5SP1

[DataContract(IsReference = true)] 
public class Employee 

Po więcej szczegółów patrz. MSDN DataContractAttribute.IsReference

+0

zagłosuj na niedziałający link –

+2

Naprawiono uszkodzony link – Morbia