Jea*_*ois 8 c# wcf serialization json
在我正在开发的项目中,我们需要一个可以包含一些未定义的JSON的DataContract.
DataMember是一些仅对客户端有意义的JSON.我们希望允许客户向我们发送我们不知道的json.
例:
public class Contract
{
[DataMember]
public int clientId;
[DataMember]
public string json;
}
Run Code Online (Sandbox Code Playgroud)
显然,有一个像这样定义的契约需要客户端像这样转义json:
{
"clientId":1,
"json": "{\"test\":\"json\"}"
}
Run Code Online (Sandbox Code Playgroud)
显然,这不是我们所需要的.客户端应该发送给我们的json应该如下所示:
{
"clientId":1,
"json": {"test":"json"}
}
Run Code Online (Sandbox Code Playgroud)
可能的解决方案:
有没有人可以解决这个问题?
编辑
该服务提供休息json资源.它使用webHttpBinding定义单个端点.操作定义如下(为简单起见,将其拆除):
[WebInvoke(Method = "POST", UriTemplate = "...", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
[OperationContract]
Stream Create(Contract c);
Run Code Online (Sandbox Code Playgroud)
此外,该服务使用以下属性进行装饰:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
Run Code Online (Sandbox Code Playgroud)
谢谢.JF
WCF(从 4.5 开始)不支持将任意 JSON 反序列化为数据协定的一部分。您需要使用另一个序列化器来执行此操作 - JSON.NET 是我个人喜欢的序列化器。为了能够更改序列化程序,您可以使用不同的消息格式化程序,并在https://github.com/microsoftarchive/msdn-code-gallery-community-sz/tree/master/Supporting%20 Different%20data 的帖子中%20and%20serialization%20formats%20in%20WCF我有一个示例,它正是这样做的 - 用 JSON.NET 替换 WCF 使用的默认序列化。
请注意,要使用该库接收任意 JSON,您需要将“json”属性的类型更改为 JSON.NET JToken 中任意 JSON 的等效项:
public class Contract
{
[DataMember]
public int clientId;
[DataMember]
public Newtonsoft.Json.Linq.JToken json;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9033 次 |
| 最近记录: |