【问题标题】:Post JSON Array to WCF Rest Service Results in Empty Parameters. DataContract?将 JSON 数组发布到 WCF Rest 服务会导致空参数。数据合同?
【发布时间】: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

结构正确,但内容又为空。

返回方形。我似乎能够看到消息的结构。如何将内容映射到结构?

【问题讨论】:

    标签: c# json wcf


    【解决方案1】:

    据我所知,您获得“0”值是因为您没有在数据类上设置 [DataContract][DataMember] 属性。添加这些 attr 后,你的类应该看起来像

    [DataContract]
    public class Marker
    {
       [DataMember]
       decimal position { get; set; }
       [DataMember]
       int markerPosition { get; set; }
    }
    

    【讨论】:

    • 是的。这解决了问题。立即地。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多