WCF - Опубликовать объект JSON, содержащий массив - PullRequest
1 голос
/ 28 марта 2012

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

Вот как выглядит мой интерфейс службы:

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

Я пытаюсь заполнить TripleTransaction POSTed 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: application / 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"
      }
    ]
  }
}

1 Ответ

2 голосов
/ 28 марта 2012

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

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

Под именем переменной POST "tripleTransaction"

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

...