Cómo tener un DataContract WCF con un miembro dinámico json

en el proyecto en el que estoy trabajando, tenemos el requisito de tener un DataContract que pueda contener algunos JSON no definidos.

El DataMember es un JSON que solo tiene sentido para el cliente. Queremos permitir que el cliente nos envíe un json que no conocemos.

Ejemplo:

public class Contract
{
    [DataMember]
    public int clientId;
    [DataMember]
    public string json;
}

Obviamente, tener un contrato definido como ese requeriría que el cliente se escape del json de esta manera:

{
    "clientId":1,
    "json": "{\"test\":\"json\"}"
}

Obviamente, esto no es lo que necesitamos. El json que el cliente nos debe enviar debe tener este aspecto:

{
    "clientId":1,
    "json": {"test":"json"}
}

Posibles soluciones que investigamos:

Utilice Stream como parámetros de contrato para el cuerpo de la solicitud. Funciona, pero pone el trabajo de nuestro lado en lugar de utilizar el marco.Definiendo "json" como un objeto dinámico. No funciona. No fue capaz de obtener la propiedad escrita correctamente.Usando la biblioteca de Newtonsoft, cambie el serializador de contrato predeterminado en el punto final de WCF para serializar todas las entradas a un objeto JObject. También debemos manejar la serialización en la solicitud, y esto causa problemas en nuestra aplicación. Preferiríamos evitar de esta manera.

¿Alguien tiene una posible solución a este problema?

EDITAR

El servicio ofrece recursos de descanso json. Define un único punto final con webHttpBinding. La operación se define de esta manera (simplificada para simplificar):

[WebInvoke(Method = "POST", UriTemplate = "...", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
[OperationContract]
Stream Create(Contract c);

Además, el servicio está decorado con el siguiente atributo:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

Gracias. JF

Respuestas a la pregunta(5)

Su respuesta a la pregunta