Если то, что вы ищете, это способ управления этими метаданными на сервере без обновления клиентских приложений, то я не думаю, что атрибуты - это решение. С одной стороны, атрибуты определяются во время компиляции, и я не думаю, что вы должны манипулировать ими во время выполнения, даже если у вас есть возможность сделать это. Однако другая проблема заключается в том, что веб-сервисы на самом деле не имеют собственного механизма, соответствующего атрибутам .Net, поэтому нет встроенного способа передачи метаданных, которые представляют эти атрибуты.
Если вы действительно хотите, чтобы эти метаданные определялись с помощью атрибутов, вы могли бы поместить свой класс OrderCost в отдельную общую сборку для использования как веб-службой, так и клиентскими приложениями. Недостатком здесь является то, что если вы хотите изменить значения, которые вы определили в своих атрибутах, то клиентские приложения не увидят эти изменения, пока не получат обновленную DLL.
В качестве альтернативы, если вы хотите, чтобы клиентские приложения полностью не знали о каких-либо изменениях метаданных, то я бы подумал о создании какого-либо класса Display, который содержит требуемую отображаемую информацию и возвращается как часть результата .
Например, приведенный ниже код показывает класс с именем MyResultObject, который содержит один объект «Display» и список объектов «Data». Очевидно, что пространства имен, имена классов и организация этих классов зависит от вас:
namespace MyApplication
{
public class MyResultObject
{
public Display.OrderCost Display { get; set; }
public IList<Data.OrderCost> Data { get; set; }
}
}
namespace MyApplication.Display
{
public class Column
{
public string HeaderText { get; set; }
public bool Visible { get; set; }
}
public class OrderCost
{
public Column OrderNum { get; set; }
public Column OrderLine { get; set; }
public Column OrderRel { get; set; }
public Column OrderDate { get; set; }
public Column PartNum { get; set; }
public Column Description { get; set; }
public Column Qty { get; set; }
public Column SalesUM { get; set; }
public Column Cost { get; set; }
public Column Price { get; set; }
public Column Net { get; set; }
public Column Margin { get; set; }
public Column EntryPerson { get; set; }
public Column CustID { get; set; }
public Column Customer { get; set; }
}
}
namespace MyApplication.Data
{
public class OrderCost
{
public int OrderNum { get; set; }
public int OrderLine { get; set; }
public int OrderRel { get; set; }
public DateTime OrderDate { get; set; }
public string PartNum { get; set; }
public string Description { get; set; }
public decimal Qty { get; set; }
public string SalesUM { get; set; }
public decimal Cost { get; set; }
public decimal Price { get; set; }
public decimal Net { get; set; }
public decimal Margin { get; set; }
public string EntryPerson { get; set; }
public string CustID { get; set; }
public string Customer { get; set; }
}
}
Я думаю, что вы должны спросить себя, хотя, имеет ли смысл для службы иметь какие-либо знания о том, как будут отображаться ее данные. И наоборот, имеет ли смысл для клиента использовать данные, которые он не понимает, так что ему нужны метаданные для правильной обработки этих данных? В некоторых случаях это может быть именно тем, что вы хотите сделать, но, вероятно, не в общем случае, я думаю. В любом случае, вам решать, каков правильный подход для вашего приложения.