【发布时间】:2011-07-12 17:41:34
【问题描述】:
我正在上课,如下所示:
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
[DataContract()]
public class TestCol : List<Test> { }
[DataContract()]
public class MainTest
{
public TestCol Components { get; set; }
}
[DataContract()]
public class Test
{
public Test() { }
public String Name { get; set; }
}
还有一个带有如下 webmethod 的 web 服务:
[WebMethod]
public String Test(MainTest input)
{
String rtrn = String.Empty;
foreach (Test test in input.Components)
rtrn += test.Name;
return rtrn;
}
AJAX 调用方式如下:
var Test = {};
Test.Name = "Test";
var MainTest = {};
MainTest.Components = [];
MainTest.Components.push(Test);
$.ajax({
type: "POST",
url: "WebService/WSTest.asmx/Test",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
"input": MainTest
}),
success: function(data, textStatus) {
console.log("success");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
window.console && console.log && console.log(XMLHttpRequest.responseText + " || " + textStatus + " || " + errorThrown);
}
});
执行 AJAX 调用时,会返回错误。我发现错误在于类型化类TestCol,它没有属性。
现在我是否找到了 2 个需要更改 C# 类的解决方案:
-
删除
TestCol类并将Components属性更改为List<Test>数据类型:[DataContract()] public class MainTest { public List<Test> Components { get; set; } } [DataContract()] public class Test { public Test() { } public String Name { get; set; } } -
或者向
TestCol类添加一个额外的属性并更改网络方法:[DataContract()] public class TestCol : List<Test> { public List<Test> Components { get; set; } } [DataContract()] public class MainTest { public TestCol Components { get; set; } } [DataContract()] public class Test { public Test() { } public String Name { get; set; } }&
[WebMethod] public String Test(MainTest input) { String rtrn = String.Empty; foreach (Test test in input.Components.Components) rtrn += test.Name; return rtrn; }
这两种解决方案都需要更改 C# 类,我不希望这样做,因为其他代码依赖于它。 有人知道这个问题的解决方案吗?
编辑:我上传了一个测试解决方案,包含上面的代码:http://jeroenvanwarmerdam.nl/content/temp/JSONtoClassWebservice.zip
【问题讨论】:
-
您知道
DataContract与 WCF 相关,而不是与 ASMX Web 服务相关吗? -
您能否提供有关您收到的错误的信息?我之前在空类上使用过 DataContract,没有任何问题。
标签: javascript ajax web-services json asmx