2016-04-14 45 views
0

我有WCF方法邮政JSON字符串WCF方法

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

这是我张贴

{ 
    "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字符串,但我在WCF方法越来越OrderData为空

如果我发帖字符串

"{\"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,在此先感谢..

+2

你能告诉我们你把对象转换成json字符串的代码吗? – bit

+0

不,我只是用post man客户端发布json字符串到wcf方法。 –

回答

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对象represen而不是一个字符串,并且WCF运行时期望将内容反序列化为它在服务器上的等效强类型对象。

0

我认为你需要从OperationContract的去除RequestFormat和ResponseFormat

+0

雅我试过这个,但我得到这个错误:服务器遇到错误处理请求。异常消息是'反序列化System.String类型的对象时出现错误。从期望的命名空间''结束元素'root'。从名字空间''。'找到元素'customerId'。 –

+0

尝试将返回的数据格式化为JSON字符串。 –

+0

赞同: var text ='{“employees”:['+“'”“firstName”:“John”,“lastName”:“Doe”},'+ '{“firstName”:“Anna” “lastName”:“Smith”},'+ '{“firstName”:“Peter”,“lastName”:“Jones”}]}'; –