【发布时间】:2012-05-03 14:31:47
【问题描述】:
您会认为这里的所有帖子都很容易弄清楚。 :|那么这应该是一个简单的例子。注意 Web 服务是 VB,客户端是 c#。 wb 服务在从 JQuery 调用时可以正常发送和接收。从 .NET 有问题, 如果服务要求如下所示的参数,则客户端的 getresponse 方法会收到错误 500 Internal server error
网络服务
<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, XmlSerializeString:=False)> _
Public Function Test(WebInfo As GetUserID) As Person
Dim Someone As New Person
Someone.Name = "Bob"
Someone.FavoriteColor = "Green"
Someone.ID = WebInfo.WebUserID.ToString()
Return Someone
End Function
Web 客户端(设置为发送和接收 JSON)
public Person Test(int UserID, string url) {
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url + "test.asmx/Test");
webRequest.Method = "POST";
webRequest.ContentType = "application/json; charset=utf-8";
StreamWriter sw = new StreamWriter(webRequest.GetRequestStream());
sw.Write("{'WebInfo':{'WebUserID':1}}"); // this works from JQuery
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
Stream responseStream = webResponse.GetResponseStream();
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Person));
Person someone = (Person)jsonSerializer.ReadObject(responseStream);
return someone;
}
有没有人成功做到这一点? 谢谢
【问题讨论】:
-
我有一个解决方案,稍后我会发布。解决方案包括 1) 使用 DatacontractJsonSerializer 序列化 json 2) 在 WCF 服务中使用 WebMessageBodyStyle.Bare 正文样式以避免必须包装 json。 3) 用户 JavaScriptSerializer 反序列化响应字符串
-
哦,我猜第 4 项)从 Web 服务切换到 WCF 服务,这就是第 2 项在那里的原因
标签: asp.net json web-services