ASMX Web Service - Вернуть пользовательский класс со свойствами
-
27-09-2019 - |
Вопрос
Эй, я пытаюсь вернуть пользовательский класс из веб-метода. Класс имеет свойства и / или методы. Учитывая следующий веб-метод:
[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;
}
Теперь предположим, что эта веб-сервис потребляется путем добавления веб-справки в недавно созданном приложении консоли. Следующий код используется для тестирования его:
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 содержит метод, вызов на веб-метод не выполнен, но метод не находится в сгенерированном классе прокси. Например: 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 потерпит неудачу, потому что ваш client
Сторона не имеет идеи, как правильно построить класс меню.
Попробуй это:
[Serializable]
public class MenuItem
{
private string name;
public MenuItem()
{
name = "pizza";
}
public string Name
{
get {
return name;
}
set {
name = value;
}
}
}
Другие советы
- Частные свойства не отправляются клиенту, если я помню правильно.
- Методы не могут быть сгенерированы на клиенте. Какой метод использовал некоторые ресурсы на сервере? 2А. Работать вокруг этого, вы можете использовать частичные классы для переоборудования некоторых методов.