将JSON数组发布到WCF Rest服务结果为空参数.DataContract?

Mat*_*ski 5 c# wcf json

我试图在dotnet(VS 2012)中创建一个接受JSON列表的restful web服务.有这个非常有用的帖子.

Jquery Ajax将json发布到webservice

这个例子是现货,但我需要对DataContract进行排序.这是我的问题:

提琴手帖子:

 { "Markers": [
 { "position": "128.3657142857143", "markerPosition": "7" },
 { "position": "235.1944023323615", "markerPosition": "19" },
 { "position": "42.5978231292517", "markerPosition": "-3" }
 ]};
Run Code Online (Sandbox Code Playgroud)

在VS2012调试器中,我看到了等价物:

 { "Markers": [
 { "position": "0", "markerPosition": "0" },
 { "position": "0", "markerPosition": "0" },
 { "position": "0", "markerPosition": "0" }
 ]};
Run Code Online (Sandbox Code Playgroud)

这是代码(直接来自链接的示例):

public class Marker
{
   decimal position { get; set; }
   int markerPosition { get; set; }
}

public string CreateMarkers(List<Marker> Markers)
{
   return "Received " + Markers.Count + " markers.";
}
Run Code Online (Sandbox Code Playgroud)

这是合同:

[OperationContract]
[WebInvoke(UriTemplate = "Markers", Method = "POST", ResponseFormat =    WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string CreateMarkers(List<Marker> Markers);
Run Code Online (Sandbox Code Playgroud)

另一篇同样精彩的文章解释说,需要设置datacontract以查看参数值:

JSON的WCF REST POST:参数为空

我原来的问题是数据合同应该是什么.我开始时:

[OperationContract]
[WebInvoke(UriTemplate = "Markers", Method = "POST", ResponseFormat =           WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string CreateMarkers(List<Marker> Markers);
Run Code Online (Sandbox Code Playgroud)

之后消息结构通过,但是null内容.然后,根据建议,我尝试过:

[OperationContract]
[WebInvoke(UriTemplate = "Markers", Method = "POST", ResponseFormat =           WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
string CreateMarkers(List<Marker> Markers);
Run Code Online (Sandbox Code Playgroud)

之后,消息结构和内容为空.

 [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();
    }
Run Code Online (Sandbox Code Playgroud)

这是签约的操作,更改为WrappedRequest

结构是正确的,但内容再次为空.

回到原点.我似乎能够看到消息的结构.如何将内容映射到结构?

小智 8

根据我的知识你得到'0'值因为你没有在你的数据类上设置[DataContract][DataMember]属性.添加那些attr之后,你的课应该是这样的

[DataContract]
public class Marker
{
   [DataMember]
   decimal position { get; set; }
   [DataMember]
   int markerPosition { get; set; }
}
Run Code Online (Sandbox Code Playgroud)