以下是我想要返回的返回类型Dictionary<ReportID, ReportDatail>
其中类的结构为:
Class ReportDetail
{
ReportID,
ReportName,
ReportShortName,
List<ReportFields>
}
Class ReportFields
{
SystemName,
DBName,
DataType,
MaxLength,
DefaultValue
}
我不知道如何将该回复作为字典返回。
function GetReportsDetails(AccoutType) {
$.ajax({
type: "POST",
url: '<%= ResolveUrl("~/Web/ReportPosition.aspx/GetReportDetail") %>',
contentType: "application/json; charset=utf-8",
datatype: 'json',
data: JSON.stringify({SelectedAccount: AccoutType}),
success: function (data) {
alert(data.d);
},
error: function (xhr, status, error) {
alert('XHR: ' + xhr.responseText + '\nStatus: ' + status + '\nError: ' + error);
}
});
[WebMethod]
public static string GetReportDetail(string AccoutItem)
{
return "Response from WebMethod..!";
//What type of code I've to write here to return "Dictionary<ReportID, ReportDatail>"
}
在上面的web方法中,我只返回字符串而不是字典作为响应,但仍然会收到错误:
Type \u0027System.String\u0027 is not supported for deserialization of an array.
如何将数据传递到WebMethod
并将处理响应作为字典从WebMethod
答案 0 :(得分:1)
输入&#34; System.String&#34;不支持反序列化数组。
我不清楚为什么此代码会提供此错误消息。但无论如何,您可以简化一些序列化。由于该方法只是期望一个字符串,所以只给它一个带有预期参数名称的字符串作为键。我将假设您的JavaScript代码中的AccountType
是一个字符串:
data: { AccountItem: AccountType }
我不知道如何返回词典&lt;&gt; respose
同样的方式,你可以返回任何东西。因此,例如,如果您想要返回Dictionary<int, ReportDetail>
,则可以执行此操作:
[WebMethod]
public static Dictionary<int, ReportDetail> GetReportDetail(string AccoutItem)
{
return new Dictionary<int, ReportDetail>();
}
至于如何使用实际数据 填充该对象(而不仅仅是返回一个空字典),这完全取决于您。
并使用jquery处理
返回实际数据时,请使用浏览器的调试工具检查JSON响应的结构。它实际上只是一个对象数组。您可以像其他任何对象一样遍历它,检查对象的属性等。
success: function (data) {
for (var i = 0; i < data.length; i++) {
// do something with data[i]
}
}
答案 1 :(得分:0)
试试这个:
定义要发送的类类型:
public class DataAccountItem
{
public string SelectedAccount { get; set; }
}
在[WebMethod]
中你需要传递这个类:
[WebMethod]
public static string GetReportDetail(DataAccountItem myItem)
{
return "Response from WebMethod..!";
//What type of code I've to write here to return "Dictionary<ReportID, ReportDatail>"
}