我需要从 C# Web 服务获取 Json 数据。
我知道有几个基于此的问题,相信我,我已经阅读了很多,但只是让我更加困惑。
这就是我所做的:
在我的网络服务中,我包括:[System.Web.Script.Services.ScriptService]
对于班级&[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
对于方法
我也用过JavaScriptSerializer()
将我的数据转换为字符串
我正在使用调用此服务$.getJSON()
如果我不使用它,我会收到跨域引用错误。
为此,我必须设置 m 服务来获取回调函数名称
所以我正在通过this.Context.Request["callback"]
+ 序列化 Json 数据;
但在输出中我把它包裹在
< string xmlns="http://XYZ...">
标签内的数据是我需要的格式
我还尝试使用以下方法设置内容类型:$.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; charset=utf-8"});
但仍然没有成功。
后来添加:我接受了 frenchie 的 anwser,因为我知道这是正确的方法,但我仍然无法让它工作...我只是将网络服务和网站放在同一个域中并使用 xml,我知道这不是最好的方法,但我已经花了两天时间了,不能再浪费了。
用这个:
var JsonString = ....;
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "YourWebServiceName.asmx/yourmethodname",
data: "{'TheData':'" + JsonString + "'}",
dataType: "json",
success: function (msg) {
var data = msg.hasOwnProperty("d") ? msg.d : msg;
OnSucessCallBack(data);
},
error: function (xhr, status, error) {
alert(xhr.statusText);
}
});
function OnSuccessCallData(DataFromServer) {
// your handler for success
}
然后在服务器端,在 AppCode 文件夹中自动生成的代码隐藏文件中,编写如下内容:
using System.Web.Services;
using System.Web.Script.Serialization;
[System.Web.Script.Services.ScriptService]
public class YourWebServiceName : System.Web.Services.WebService
{
[WebMethod]
public string yourmethodname(string TheData)
{
JavascriptSerializer YourSerializer = new JavascriptSerializer();
// custom serializer if you need one
YourSerializer.RegisterConverters(new JavascriptConverter [] { new YourCustomConverter() });
//deserialization
TheData.Deserialize(TheData);
//serialization
TheData.Serialize(TheData);
}
}
如果您不使用自定义转换器,则服务器端对象的 json 字符串和 C# 类定义之间的属性必须匹配,反序列化才能正常工作。对于序列化,如果您没有自定义转换器,则 json 字符串将包含 C# 类的每个属性。你可以加[ScriptIgnore]
就在 C# 类中的属性定义之前,如果您不指定自定义转换器,则序列化程序将忽略该属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)