2012-03-27 14 views
1

Ich versuche, JSON an einen WCF-Dienst zu senden. Das Json-Objekt enthält eine Eigenschaft und ein Array. Das Problem ist, dass TripleTransaction immer null ist, wenn die Anforderung beim Server eingeht. Ich frage mich, wie ich meinen Datenvertrag richtig binden kann. Wenn mir hier jemand einen Zeiger geben kann, würde ich das sehr schätzen.WCF - Post-JSON-Objekt, das ein Array enthält

Dies ist, was meine Service-Schnittstelle wie folgt aussieht:

[OperationContract] 
     [CorsBehavior] 
     [WebInvoke(Method = "POST", UriTemplate = "Triples/{library}", ResponseFormat = WebMessageFormat.Json)] 
     ResultMessage InvokeGraphTransactions(string library, TripleTransaction tripleTransaction); 

ich die TripleTransaction mit dem von ihm entsandten JSON zu füllen versucht bin. TripleTransaction enthält eine Liste von TripleModel.

[DataContract] 
public class TripleTransaction 
{ 
    [DataMember] 
    public string Localization { get; set; } 

    [DataMember] 
    public List<TripleModel> Transactions { get; set; } 
} 


[DataContract] 
    public class TripleModel 
    { 
     [DataMember] 
     public int TransactionType { get; set; } 

     [DataMember] 
     public string SubjectLocalPart { get; set; } 

     [DataMember] 
     public string PredicateLocalPart { get; set; } 

     [DataMember] 
     public string ObjectPart { get; set; } 

     [DataMember] 
     public string Update { get; set; } 

    } 

Der obige Datenvertrag ist wie der POSTed JSON modelliert. Mit FireBug kann ich sehen, dass die Anfrage korrekt aussieht. Die JSON ist in der Payload der Message und der Request-Header hat eine content: application/json

Dies ist ein Beispiel für die json, die ich zu senden versucht bin:

{ 
    "tripleTransaction": { 
    "Localization": "en-us", 
    "Transactions": [ 
     { 
     "TransactionType": 0, 
     "SubjectLocalPart": "testSubject", 
     "PredicateLocalPart": "testPredicate", 
     "ObjectPart": "1", 
     "Update": "2" 
     }, 
     { 
     "TransactionType": 1, 
     "SubjectLocalPart": "testSubject", 
     "PredicateLocalPart": "testPredicate", 
     "ObjectPart": "1" 
     } 
    ] 
    } 
} 
+0

BekannteTypen? Aber ich bin nicht sicher, ob es auf Restdienst benötigt wird – Nikolay

Antwort

2

Sie diesen Beitrag soll:

{ 
    "Localization": "en-us", 
    "Transactions": [ 
     { 
     "TransactionType": 0, 
     "SubjectLocalPart": "testSubject", 
     "PredicateLocalPart": "testPredicate", 
     "ObjectPart": "1", 
     "Update": "2" 
     }, 
     { 
     "TransactionType": 1, 
     "SubjectLocalPart": "testSubject", 
     "PredicateLocalPart": "testPredicate", 
     "ObjectPart": "1" 
     } 
    ] 
    } 

Unter dem POST Variablennamen „tripleTransaction“

Sonst weiß es nicht an, welcher Parameter sollte Ihre Daten verknüpfen

+0

Sie sind ein Genie! Danke Mann .. – Nick

+0

Was meinst du mit POST Variablenname? – Cyberpass

+0

Wenn Sie auf einer Seite Daten posten, können Sie nur eine Liste mit Schlüsselwertdaten bereitstellen. Wenn ich "POST Variablenname" sage, meine ich den Schlüssel. Bitte lesen Sie https://en.wikipedia.org/wiki/POST_%28HTTP%29 – Fabske

Verwandte Themen