ASMX Web 服务 - 返回具有属性的用户定义的类
-
27-09-2019 - |
题
嘿,我正在尝试从Web方法返回用户定义的类。该类具有属性和/或方法。给出以下网络方法:
[WebMethod]
public List<MenuItem> GetMenu()
{
List<MenuItem> menuItemList = new List<MenuItem>();
menuItemList.Add(new MenuItem());
menuItemList.Add(new MenuItem());
menuItemList.Add(new MenuItem());
return menuItemList;
}
现在,假设通过在新创建的控制台应用程序中添加 Web 引用来使用此 Web 服务。下面的代码用来测试它:
public void TestGetMenu()
{
MenuService service = new MenuService.MenuService();
service.MenuItem[] menuItemList = service.GetMenu();
for (int i = 0; i < menuItemList.Length; i++)
{
Console.WriteLine(menuItemList[i].name);
}
Console.ReadKey();
}
首先,如果 MenuItem 类包含属性,则这不起作用......此外,如果 MenuItem 类包含一个方法,则对 Web 方法的调用不会失败,但该方法不在生成的代理类中。例如:menuItemList[i].getName() 不存在。为什么?我缺少什么?
//This works
public class MenuItem
{
public string name;
public MenuItem()
{
name = "pizza";
}
}
//This crashes / doesnt work
public class MenuItem
{
private string name;
public MenuItem()
{
name = "pizza";
}
public string Name
{
get { return name; }
set { name = value; }
}
}
//This successfully calls web method, but the method does not exist during test
public class MenuItem
{
private string name;
public MenuItem()
{
name = "pizza";
}
public string getName()
{
return name;
}
}
解决方案
它只会如果类是可序列化,这通常意味着公共字段和属性的工作,这是为什么?因为你的client
方不知道如何正确地构建MenuItem类的菜单项就会失败。
尝试这种情况:
[Serializable]
public class MenuItem
{
private string name;
public MenuItem()
{
name = "pizza";
}
public string Name
{
get {
return name;
}
set {
name = value;
}
}
}
其他提示
- 如果我没记错的话,私有财产不会发送给客户。
- 无法在客户端生成方法。使用服务器上的一些资源的方法是什么?2a.要解决此问题,您可以使用分部类来重新实现某些方法。
不隶属于 StackOverflow