2012-05-18 79 views
4

我想将JSON发布到WCF服务。 json对象包含一个数组。我想知道如何正确绑定到我的数据合同。如果任何人都可以在这里给我一个指针,我会非常感激。目前我的购物车对象为空WCF - 发布JSON对象

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

public interface IService 
{ 

[OperationContract] 
[WebInvoke(UriTemplate = "/cart", Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)] 
Ship GetShipInfo(Cart cart, string Website); 
} 

[DataContract] 
public class Cart 
{ 
[DataMember] 
public Int32 ProductID { get; set;} 
[DataMember] 
public decimal ItemPrice { get; set; } 
[DataMember] 
public Int16 Qty { get; set; } 
[DataMember] 
public String SizeWidth { get; set; } 
} 

我的客户呼叫如下

客户端调用

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Runtime.Serialization.Json; 
using System.Net; 
using System.IO; 

public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 

DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(string)); 
Cart cart = new Cart{ ProductID = 1000, ItemPrice = Convert.ToDecimal(32.50), Qty = 1, SizeWidth = “6M” }; 
WebClient Proxy1 = new WebClient(); 
Proxy1.Headers["Content-type"] = “application/json”; 
MemoryStream ms = new MemoryStream(); 
DataContractJsonSerializer serializerToUplaod = new DataContractJsonSerializer(typeof(Cart)); 
serializerToUplaod.WriteObject(ms, cart); 

byte[] data = Proxy1.UploadData(“http://localhost:54897/IphoneService.svc/cart”, “POST”, ms.ToArray()); 
Stream stream = new MemoryStream(data); 
obj = new DataContractJsonSerializer(typeof(Ship)); 
var Ship = obj.ReadObject(stream) as Ship; 

} 

public class Ship 
{ 
public Decimal SecondDay { get; set; } 
public Decimal NextDay { get; set; } 
} 

public class Cart 
{ 

public Int32 ProductID { get; set; } 

public Decimal ItemPrice { get; set; } 

public Int16 Qty { get; set; } 

public String SizeWidth { get; set; } 
} 

} 

我的JSON看起来像这样

{"cart": 
[ 
{"ProductID":2957, 
"Qty":1, 
"ItemPrice":60, 
"SizeWidth":"5M"} 
] 
} 
+0

我这个苦苦挣扎,以及(相关帖子和其他人在这里输入):https://stackoverflow.com/a/48906303/826308 –

回答

6

您的WCF REST方法应该从提琴手看起来像下面的原始请求:

POST http://localhost:54897/IphoneService.svc/cart HTTP 1.1 
Content-Type: application/json 
Host: localhost 

{"cart":{"ProductId":1,"ItemPrice":60,"Qty":1,"SizeWidth":"5M"},"Website":"sample website"} 

在JSON的响应看起来如下:

HTTP/1.1 200 OK 
Content-Type: application/json 
Content-Length: 30 

{"SecondDay":5.0, "NextDay":7.0}