2013-10-12 8 views
5

Ich versuche, in dotnet (VS 2012) einen erholsamen Webdienst zu erstellen, der eine JSON-Liste akzeptiert. Da ist dieser sehr hilfreiche Beitrag.JSON-Array an WCF-Rest-Service-Ergebnisse in leere Parameter senden. Datenkontrakt?

Jquery Ajax Posting json to webservice

Das Beispiel ist genau das Richtige, aber ich brauche die Datacontract sortiert. Hier ist mein Problem:

Fiddler-Beiträge:

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

Im VS2012 Debugger sehe ich das Äquivalent:

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

Hier ist der Code (gerade aus dem verknüpften Beispiel):

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

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

Hier ist der Vertrag:

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

Das andere, ebenso wunderbar, Post erklärt, dass die Datacontract eingestellt werden muss, um die Parameterwerte zu sehen:

WCF REST POST of JSON: Parameter is empty

Meine ursprüngliche Frage war, was sollte der Datenvertrag sein. Ich begann mit:

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

Nach dem die Nachricht Struktur kommt durch, aber Null Inhalt. Dann, auf Vorschlag, habe ich versucht:

Nach dem die Nachrichtenstruktur und der Inhalt Null waren. Hier

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

ist die Operationen zusammengezogen, geändert WrappedRequest

Die Struktur war richtig, aber der Inhalt war wieder null.

Zurück zum Anfang. Ich scheine in der Lage zu sein, die Struktur der Nachricht zu sehen. Wie bekomme ich den Inhalt der Struktur zugeordnet?

Antwort

8

Wie par mein Wissen Sie immer ‚0‘ Wert, weil Sie nicht [Datacontract] und [Datamember] Attribut auf Ihre Datenklasse festgelegt haben. Nach dem Hinzufügen dieser attr sollte Ihre Klasse wie

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

Ja aussehen werden. Dies behebt das Problem. Sofort. Vielen Dank! –