将json字符串发布到WCF方法

时间:2016-04-14 10:28:59

标签: c# json wcf

我有WCF方法

[OperationContract]
[WebInvoke(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
string PostNewOrder(string OrderData);

这是我发布的json字符串

{
    "customerId": " ",
    "langCode": "SE",
    "timeZone": "38",
    "orderNumber": "1122519",
    "orderDate": "2016-04-13 15:56:36",
    "deliveryNumber": "625615",
    "devices": "000000001050840;",
    "transactionId": "24",
    "shipDate": "2016-04-13 16:41:31"
}

但是我在WCF方法中将OrderData作为null

如果我发布字符串

"{\"customerId\":\" \",\"langCode\":\"SE\",\"timeZone\":\"38\",\"orderNumber\":\"1122519\",\"orderDate\":\"2016-04-13 15:56:36\",\"deliveryNumber\":\"625615\",\"devices\":\"000000001050840;\",\"transactionId\":\"24\",\"shipDate\":\"2016-04-13 16:41:31\"}"

它工作正常,但这不是一个合适的json,在此先感谢..

3 个答案:

答案 0 :(得分:1)

你的合同应该类似于 -

    [OperationContract]
    [WebInvoke(Method = "POST",
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json ,
    UriTemplate="/post")]
    string PostNewOrder(RootObject OrderData);

RootObject应该是什么样的 -

public class RootObject
{
    public string customerId { get; set; }
    public string langCode { get; set; }
    public string timeZone { get; set; }
    public string orderNumber { get; set; }
    public string orderDate { get; set; }
    public string deliveryNumber { get; set; }
    public string devices { get; set; }
    public string transactionId { get; set; }
    public string shipDate { get; set; }
}

您发布的是json对象表示而不是字符串,WCF运行时应该将内容反序列化为服务器上等效的强类型对象。

答案 1 :(得分:0)

我认为您需要从OperationContract

中删除RequestFormat和ResponseFormat

答案 2 :(得分:0)

这是一个古老的问题,但是如果有人需要答案:

您需要将json字符串包装在注释字符串中。

我使用的是角度-因此,在我的情况下,我这样做了:

let doc = new FileData();
...
let jsonObj = JSON.stringify(doc); //json object string

let strObj = JSON.stringify(jsonObj); //json object string wrapped with string