WCF - 发布包含数组的JSON对象

时间:2012-03-27 21:29:05

标签: c# wcf web-services rest wcf-binding

我正在尝试将JSON POST到WCF服务。 json对象包含属性和数组。问题是当请求到达服务器时,TripleTransaction始终为null。我想知道如何正确绑定到我的数据合同。如果有人能在这里给我一个指针我真的很感激。

这就是我的服务界面:

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

我正在尝试使用POSTed JSON填充TripleTransaction。 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; }

    }

上述datacontract的建模类似于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 个答案:

答案 0 :(得分: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”

否则它不知道它应该将您的数据链接到哪个参数