【问题标题】:ASMX Web Service - Return user defined class with propertiesASMX Web 服务 - 返回具有属性的用户定义类
【发布时间】:2010-10-01 13:32:39
【问题描述】:

嘿, 我正在尝试从 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;  
    }  
}

【问题讨论】:

  • 在这里格式化代码只需缩进 4 个空格,不要将其包装在 块中。有一个小按钮,您可以使用它来为您完成。
  • 谢谢,真的开始烦我了。

标签: asp.net web-services asmx user-defined-types


【解决方案1】:

只有当类是可序列化的,这通常意味着公共字段和属性时,它才会起作用,这就是你的 MenuItem 会失败的原因,因为你的client 方不知道如何正确地构造 MenuItem 类。

试试这个:

[Serializable]
public class MenuItem
{
   private string name;

   public MenuItem()
   {
      name = "pizza";
   }

   public string Name
   {
      get {
         return name;
      }
      set {
         name = value;
      }
   }

}

【讨论】:

  • 谢谢,这行得通... Stackoverflow 社区非常好。是的...最后...
【解决方案2】:
  1. 如果我没记错的话,私有属性不会发送给客户端。
  2. 无法在客户端生成方法。使用服务器上某些资源的方法是什么? 2a。要解决此问题,您可以使用部分类来重新实现一些方法。

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多