Jak mieć WCF DataContract z członkiem dynamicznym json

w projekcie, nad którym pracuję, mamy wymóg posiadania DataContract, który może zawierać niezdefiniowany JSON.

DataMember to jakiś JSON, który ma sens tylko dla klienta. Chcemy pozwolić klientowi wysłać nam json, o którym nie wiemy.

Przykład:

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

Oczywiście posiadanie takiej umowy wymagałoby od klienta ucieczki od jsona w ten sposób:

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

Oczywiście to nie jest to, czego potrzebujemy. Json, który klient powinien nam wysłać, powinien wyglądać następująco:

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

Możliwe rozwiązania, które zbadaliśmy:

użyj Stream jako parametrów umowy dla treści żądania. Działa, ale umieszcza pracę po naszej stronie, zamiast używać frameworka.Definiowanie „json” jako obiektu DynamicObject. Nie działa. Nie był w stanie poprawnie pobrać nieruchomości.Korzystając z biblioteki Newtonsoft, zmień domyślny serializator umów w punkcie końcowym WCF, aby serializować wszystkie dane wejściowe do obiektu JObject. Zajmujemy się również serializacją na żądanie, co powoduje problemy w naszej aplikacji. Wolelibyśmy unikać tego.

Czy ktoś ma możliwe rozwiązanie tego problemu?

EDYTOWAĆ

Usługa oferuje zasoby spoczynkowe. Definiuje pojedynczy punkt końcowy z webHttpBinding. Operacja jest zdefiniowana w ten sposób (uproszczona dla uproszczenia):

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

Ponadto usługa jest ozdobiona następującym atrybutem:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

Dziękuję Ci. JF

questionAnswers(5)

yourAnswerToTheQuestion