【发布时间】:2011-01-18 20:48:33
【问题描述】:
我对 WCF 有点陌生,我会尽量清楚地描述我正在尝试做的事情。
我有一个使用 JSON 请求的 WCF 网络服务。在大多数情况下,我在发送/接收 JSON 方面做得很好。例如,以下代码运行良好且符合预期。
JSON 发送:
{ "guy": {"FirstName":"Dave"} }
WCF:
[DataContract]
public class SomeGuy
{
[DataMember]
public string FirstName { get; set; }
}
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
public string Register(SomeGuy guy)
{
return guy.FirstName;
}
这会按预期返回一个带有“Dave”的 JSON 对象。问题是我不能总是保证我收到的 JSON 将与我的 DataContract 中的成员完全匹配。例如,JSON:
{ "guy": {"firstname":"Dave"} }
将无法正确序列化,因为大小写不匹配。 guy.FirstName 将为空。这种行为是有道理的,但我真的不知道如何解决这个问题。我是否必须在客户端强制使用字段名称,还是有办法在服务器端进行协调?
一个可能相关的问题:我可以接受通用 JSON 对象并将其序列化为 StringDictionary 或某种简单的键值结构吗?所以无论在 JSON 中发送什么字段名称,我都可以访问已发送给我的名称和值吗?现在,我可以读取我收到的数据的唯一方法是它是否与预定义的 DataContract 完全匹配。
【问题讨论】:
-
当然你可以保证json符合合同。只有当您无法控制客户端时,您才能控制它。如果您无法控制客户端,那么它可能在您的服务域之外,并且这一点没有实际意义。我没有看到问题。我看到的所有解决方法都是徒劳的,只会增加痛苦。阅读 DataContract/DataMember 上的规范并遵循它们。 2 比索。
-
你是对的。从技术上讲,我可以在发送信息之前将其写入 JS。而且,我在另一条评论中暗示这可能是我最终会做的事情。不过,我希望服务能够处理任意数量的事先不一定知道的字段。那有意义吗?我只想要一个服务,它可以接受完全任意的“键”:“值”对列表,然后决定如何处理它们,而无需事先知道“键”名称。
标签: .net wcf json serialization datacontractserializer