Wcf JSON负载中引号的处理不一致

Wcf JSON负载中引号的处理不一致,wcf,wcf-data-services,Wcf,Wcf Data Services,为什么可以在WCF数据服务中发送以下JSON字符串: { SomeElement: 'val1', SomeOtherElement: 'val2' } 而您必须发送一个正常的WCF服务,如 [OperationContract, WebInvoke (Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json,

为什么可以在WCF数据服务中发送以下JSON字符串:

{ SomeElement: 'val1', SomeOtherElement: 'val2' }
而您必须发送一个正常的WCF服务,如

[OperationContract,
 WebInvoke (Method = "POST",
            ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Wrapped)]
public string SomeMehtod(string SomeElement, string SomeOtherElement)
下面是JSON字符串

{ "SomeElement": "val1", "SomeOtherElement": "val2" }
我不清楚这种不一致性。为什么我必须在正常的web服务中使用双引号,而不能在WCF数据服务中省略元素名称的引号


也许有人知道这个问题的答案……

我非常熟悉WCF JSON解析基础设施背后的内部管道,从本质上说,处理第二种情况的管道实际上是为了支持“严格”的JSON标准而设计的

第一种情况适用于不兼容的JSON,这只是巧合。别读了。这不是一个有意识的设计决定。希望这能消除混乱


有关更多详细信息,您可以使用Reflector浏览DataContractJsonSerializePropertyFormatter、DataContractJsonSerializePropertyBehavior和DataContractJsonSerializer

JSON标准()要求元素名被引用,并且要求所有字符串都用双引号引起来。因此,您的第一个示例是有效的JavaScript,但不是有效的JSON。但这并不能真正解释这种不一致性。是的,这是正确的,WCF数据服务似乎也接受双引号。看起来WCF在这里比普通WCF更宽容。奇怪的是,因为WCF数据服务是在WCF之后引入的。。。我只是好奇…你用什么动词来称呼你的WCF数据服务(GET、POST、PUT等)?这也是一个帖子吗?这是一种定制的服务方式吗?基本上,它是POST还是PUT都不重要,在这种情况下,它是POST,但PUT也起作用。它不是一个定制的服务方法。