2013-10-12 19 views
5

Tôi đang cố gắng tạo một dịch vụ web an toàn trong dotnet (VS 2012) chấp nhận danh sách JSON. Có bài viết rất hữu ích này.Đăng mảng JSON vào kết quả dịch vụ còn lại WCF trong tham số trống. DataContract?

Jquery Ajax Posting json to webservice

Các ví dụ là tại chỗ trên, nhưng tôi cần DataContract sắp xếp. Đây là vấn đề của tôi:

bài viết

Fiddler:

{ "Markers": [ 
{ "position": "128.3657142857143", "markerPosition": "7" }, 
{ "position": "235.1944023323615", "markerPosition": "19" }, 
{ "position": "42.5978231292517", "markerPosition": "-3" } 
]}; 

Trong VS2012 Debugger tôi nhìn thấy tương đương:

{ "Markers": [ 
{ "position": "0", "markerPosition": "0" }, 
{ "position": "0", "markerPosition": "0" }, 
{ "position": "0", "markerPosition": "0" } 
]}; 

Đây là mã (trực tiếp từ các ví dụ liên kết):

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

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

Đây là hợp đồng:

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

này khác, không kém phần tuyệt vời, bài giải thích rằng DataContract cần phải được thiết lập để xem các giá trị tham số:

WCF REST POST of JSON: Parameter is empty

câu hỏi ban đầu của tôi là những gì nên hợp đồng dữ liệu được. Tôi bắt đầu với:

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

Sau đó cấu trúc thông báo đi qua, nhưng nội dung rỗng. Sau đó, khi đề xuất, tôi đã thử:

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

Sau đó cấu trúc thông báo và nội dung là rỗng.

[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(); 
    } 

Đây là hoạt động ký hợp đồng, thay đổi để WrappedRequest

Cấu trúc là đúng, nhưng nội dung là một lần nữa null.

Quay lại hình vuông. Tôi dường như có thể thấy cấu trúc của thông điệp. Làm thế nào để tôi lấy nội dung được ánh xạ tới cấu trúc?

Trả lời

8

Như mệnh kiến ​​thức của tôi Bạn nhận được '0' giá trị vì bạn không thiết lập [DataContract][DataMember] thuộc tính trên lớp dữ liệu của bạn. Sau khi thêm các attr này, lớp của bạn sẽ trông giống như

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

Có. Điều này đã khắc phục được sự cố. Ngay. Cảm ơn bạn! –

Các vấn đề liên quan