【问题标题】:WCF - Post JSON object containing an arrayWCF - 发布包含数组的 JSON 对象
【发布时间】:2012-04-11 11:35:36
【问题描述】:

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

这是我的服务接口的样子:

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

我正在尝试使用已发布的 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; }

    }

上述数据合约的建模类似于 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"
      }
    ]
  }
}

【问题讨论】:

  • 已知类型?但我不确定休息服务是否需要它

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


【解决方案1】:

你应该发布这个:

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

在 POST 变量名“tripleTransaction”下

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

【讨论】:

  • POST 变量名是什么意思?
  • 当你在一个页面上发布数据时,你只能发布一个键值数据列表。当我说“POST 变量名”时,我的意思是键。请阅读en.wikipedia.org/wiki/POST_%28HTTP%29
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
相关资源
最近更新 更多