我目前正在使用ScriptService属性为我的Web服务启用JSON调用.问题是我的一个类引用了第二个类,而.Net没有拿起并写出第二个类的JavaScript.
作为一种解决方法,我可以编写一个只返回第二个类的虚方法.然后.Net写入JSON以允许它被序列化.所以在下面的例子中:
[ScriptService] public class MyService : WebService { [WebMethod] public void SaveClass1(Class1 class1) { ... } } [Serializable] public class Class1 { public Class2 class2 { get; set; } } [Serializable] public class Class2 { }
MyService.asmx/js不会编写代码以允许我实例化Class2以便我填充Class1.但是,如果我添加:
[WebMethod] public Class2 Dummy() { return new Class2(); }
到MyService.我非常感谢任何替代我讨厌的解决方法.
您需要使用System.Web.Script.Services.GenerateScriptTypeAttribute,它指定服务器类型应包含在生成的代理代码中.您可以将此属性应用于Web服务本身或使用WebMethodAttribute标记的任何方法.
例如:
[ScriptService] [GenerateScriptType(typeof(Class2))] public class MyService : WebService { [WebMethod] public void SaveClass1(Class1 class1) { // ... } }