私が取り組んでいるプロジェクトでは、未定義の JSON を含むことができる DataContract が必要です。
DataMember は、クライアントにとってのみ意味のある JSON です。クライアントが不明な json を送信できるようにしたいと考えています。
例:
public class Contract
{
[DataMember]
public int clientId;
[DataMember]
public string json;
}
明らかに、そのように定義されたコントラクトを持つ場合、クライアントは次のように json をエスケープする必要があります。
{
"clientId":1,
"json": "{\"test\":\"json\"}"
}
明らかに、これは私たちが必要としているものではありません。クライアントが送信する必要がある json は次のようになります。
{
"clientId":1,
"json": {"test":"json"}
}
調査した可能な解決策:
- Stream をリクエストの本文のコントラクト パラメーターとして使用します。動作しますが、フレームワークを使用するのではなく、私たちの側で作業を行います。
- 「json」を DynamicObject として定義します。動作しません。適切に書き込まれたプロパティを取得できませんでした。
- Newtonsoft ライブラリを使用して、WCF エンドポイントの既定のコントラクト シリアライザーを変更し、すべての入力を JObject にシリアル化します。リクエストのシリアル化も処理する必要があり、アプリケーションで問題が発生します。この方法は避けたいと思います。
誰にもこの問題の解決策がありますか?
編集
このサービスは、残りの json リソースを提供します。これは、webHttpBinding を使用して単一のエンドポイントを定義します。操作は次のように定義されます (簡単にするために省略されています)。
[WebInvoke(Method = "POST", UriTemplate = "...", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
[OperationContract]
Stream Create(Contract c);
また、サービスは次の属性で装飾されています。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
ありがとうございました。JF