加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – ASMX Web服务 – 返回具有属性的用户定义类

发布时间:2020-12-16 07:02:48 所属栏目:asp.Net 来源:网络整理
导读:嘿, 我试图从Web方法返回用户定义的类.该类具有属性和/或方法. 给定以下Web方法: [WebMethod] public ListMenuItem GetMenu() { ListMenuItem menuItemList = new ListMenuItem(); menuItemList.Add(new MenuItem()); menuItemList.Add(new MenuItem()); me
嘿,
我试图从Web方法返回用户定义的类.该类具有属性和/或方法.
给定以下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;  
    }  
}

解决方法

它只有在类可序列化时才有效,这通常意味着公共字段和属性,这就是你的MenuItem失败的原因,因为你的客户端不知道如何正确构造MenuItem类.

试试这个:

[Serializable]
public class MenuItem
{
   private string name;

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

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

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读