将 JSON 数组发布到 WCF Rest 服务会导致空参数。数据合同?
Posted
技术标签:
【中文标题】将 JSON 数组发布到 WCF Rest 服务会导致空参数。数据合同?【英文标题】:Post JSON Array to WCF Rest Service Results in Empty Parameters. DataContract? 【发布时间】:2013-10-20 07:40:33 【问题描述】:我正在尝试在接受 JSON 列表的 dotnet (VS 2012) 中创建一个安静的 Web 服务。有这个非常有帮助的帖子。
Jquery Ajax Posting json to webservice
该示例是正确的,但我需要对 DataContract 进行排序。这是我的问题:
提琴手帖子:
"Markers": [
"position": "128.3657142857143", "markerPosition": "7" ,
"position": "235.1944023323615", "markerPosition": "19" ,
"position": "42.5978231292517", "markerPosition": "-3"
];
在VS2012调试器中,我看到等价物:
"Markers": [
"position": "0", "markerPosition": "0" ,
"position": "0", "markerPosition": "0" ,
"position": "0", "markerPosition": "0"
];
这是代码(直接从链接示例):
public class Marker
decimal position get; set;
int markerPosition get; set;
public string CreateMarkers(List<Marker> Markers)
return "Received " + Markers.Count + " markers.";
这是合同:
[OperationContract]
[WebInvoke(UriTemplate = "Markers", Method = "POST", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string CreateMarkers(List<Marker> Markers);
另一个同样精彩的帖子解释了需要设置数据合同才能查看参数值:
WCF REST POST of JSON: Parameter is empty
我最初的问题是数据合同应该是什么。我开始了:
[OperationContract]
[WebInvoke(UriTemplate = "Markers", Method = "POST", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string CreateMarkers(List<Marker> Markers);
之后消息结构通过,但内容为空。然后,在建议上,我尝试过:
[OperationContract]
[WebInvoke(UriTemplate = "Markers", Method = "POST", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
string CreateMarkers(List<Marker> Markers);
之后消息结构和内容为空。
[OperationContract]
[WebInvoke(UriTemplate = "WrappedMarkers", Method = "POST", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string WrappedMarkers(MarkerRequest wrappedmarkers);
[DataContract]
public class MarkerRequest
[DataMember]
public List<Marker> Markers
get return _markers;
set _markers = value;
private List<Marker> _markers = new List<Marker>();
public string WrappedMarkers(MarkerRequest wrappedmarkers)
return wrappedmarkers.Markers.ToString();
这里是约定的操作,改为 WrappedRequest
结构正确,但内容又为空。
返回方形。我似乎能够看到消息的结构。如何将内容映射到结构?
【问题讨论】:
【参考方案1】:据我所知,您获得“0”值是因为您没有在数据类上设置 [DataContract] 和 [DataMember] 属性。添加这些 attr 后,你的类应该看起来像
[DataContract]
public class Marker
[DataMember]
decimal position get; set;
[DataMember]
int markerPosition get; set;
【讨论】:
是的。这解决了问题。立即地。谢谢!以上是关于将 JSON 数组发布到 WCF Rest 服务会导致空参数。数据合同?的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 数据从 JQuery 发送到 WCF REST 方法时出现问题
Android将文件作为ByteArray上传到WCF REST服务
如何将 Json.Net 设置为 WCF REST 服务的默认序列化程序