2012-03-27 2 views
1

Я пытаюсь выполнить POST JSON в службе WCF. Объект json содержит свойство и массив. Проблема заключается в том, что TripleTransaction всегда имеет значение null, когда запрос поступает на сервер. Мне интересно, как правильно привязать контракт с моими данными. Если кто-нибудь может дать мне указатель, я бы очень признателен.WCF - Добавить объект JSON, содержащий массив

Это то, что мой интерфейс сервиса выглядит следующим образом:

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

Я пытаюсь заполнить TripleTransaction с посланным JSON. TripleTransaction содержит список 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; } 

    } 

Вышеуказанный тип данных моделируется как POSTED JSON. Используя FireBug, я вижу, что запрос выглядит правильно. JSON в полезной нагрузке сообщения и заголовок запроса имеет CONTENTTYPE: приложения/JSON

Это пример JSON, что я пытающийся отправить:

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

KnownTypes? Но я не уверен, что это необходимо для службы отдыха. – Nikolay

ответ

2

Вы должны опубликовать это:

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

Под POST имя переменной «tripleTransaction»

в противном случае он не знает, какой параметр следует связать данные

+0

Ты гений! Спасибо человеку .. – Nick

+0

Что вы подразумеваете под именем POST Variable? – Cyberpass

+0

Когда вы публикуете данные на странице, вы можете опубликовать только список данных с ключом. когда я говорю «имя переменной POST», я имею в виду ключ. Прочтите https://en.wikipedia.org/wiki/POST_%28HTTP%29 – Fabske

Смежные вопросы