C# 在asp.net中序列化为JSON?
您好,我是第一次在asp.net中使用JSON 我有这样的WebMethodC# 在asp.net中序列化为JSON?,c#,jquery,ajax,json,C#,Jquery,Ajax,Json,您好,我是第一次在asp.net中使用JSON 我有这样的WebMethod [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public static string Vo_Get(string Action,int ID) { Product p= new Product(); DataSet ds= new DataSet(); p.Action = A
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string Vo_Get(string Action,int ID)
{
Product p= new Product();
DataSet ds= new DataSet();
p.Action = Action;
p.ID= ID;
ds= VoGet_Get(obj);
**string jsonVesselDetails = JsonConvert.SerializeObject(ds, Formatting.None);
return jsonVesselDetails;**
}
这是我的成绩
[
{
"Pinky": 1,
"Ponky": "Breakwater Dockk",
},
{
"Pinky": 2,
"Ponky": "Watson Island Dock",
},
但当我尝试使用Ajax调用并将其附加到表中时,如果我尝试使用result绑定,它会给出未扩展的标记U,如果我尝试使用result.data绑定,它会给出意外的标记O
最后我发现问题在于序列化
我的Ajax调用是
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Voyage.aspx/Vo_Get",
data: "{'Action':'Get','ID':'68'}",
dataType: "json",
success: function (data) {
try {
alert("getdata! success" );
Get(data);
} catch (ex) {
alert(ex);
}
},
error: function (msg) {
alert("err: " + error);
}
});
而且我不知道GetVessers期待什么,但请尝试:
GetVessels(data.d);
i、 e.传递实际数据而不是整个响应对象。可能是您在成功函数中也使用了相同的变量
data
。
请尝试使用以下命令:
success: function (result) {
try {
alert("getdata! success" );
GetVessels(result);
//Rebuild the table
//BuildVesselTaggerInfo();
} catch (ex) {
alert(ex);
}
},
请注意,我已从数据更改为结果。首先验证您的
GetVessles
方法需要什么类型的JSON
或数组结构
您可以通过直接输入VoyageVessel\u Get
方法的JSON响应或手动构建它来实现。i、 e
var data= [
{
"TerminalID": 1,
"TerminalName": "Breakwater Dockk",
"PortID": 1,
"PortName": "Swire Pacific Offshore",
"Column1": "08/03/13",
"Column2": "16/03/13",
"ServiceID": 2
},
{
"TerminalID": 2,
"TerminalName": "Watson Island Dock",
"PortID": 2,
"PortName": "Keppel Offshore",
"Column1": "20/03/13",
"Column2": "23/03/13",
"ServiceID": 2
}];
GetVessels(data);
查看您的getVessers
是否适用于此对象。如果没有,那么找出它需要什么结构(只有你能做到),然后构建它
其次,您不能直接访问ASP.NET Web服务中的:success
的响应
按如下方式访问它:
success: function (data) {
var jsonData= data.d;
GetVessels(jsonData);
}
更新
如果对象包含datetime字段,请尝试在序列化中指定DateFormathandling,即
JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
};
string serializedObject= Newtonsoft.Json
.JsonConvert
.SerializeObject(dsVoyages, microsoftDateFormatSettings);
请参阅firebug中的响应,它可能会产生类似于d的结果。因为,asp.net将json结果用“d”括起来,这是一种jsonp(带填充的json),只是出于安全原因。当我给出这样的结果时,它也不起作用,它的给出错误是我的WebMethod以正确的格式序列化…,我希望必须更改,因为我遇到了问题。是的,它看起来不错。序列化时是否有任何错误?我是说在返回声明之前?我还看到数据集中有一个datetime字段,请尝试指定DateFormatHandling。等等,我正在更新代码