在我正在进行的项目中,我们需要有一个可以包含一些未定义 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)]
谢谢你。杰夫