2010-06-16 31 views
0

我目前正在尝试将自定义“列名称”添加到Web服务中的属性。这是我的班。如何通过Web服务使用自定义属性?

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; } 
} 

基本上我有另一个类(在Silverlight方面),循环所有的属性,并为每个属性创建一列。事情是,我想使用除属性名称以外的其他名称。例如,我想显示“Order Number”而不是OrderNum。我试图使用自定义属性,但似乎没有工作。有没有办法通过使用属性在Web服务上为这些属性提供不同的名称?有没有另一种方法可以实现我想要做的事情?

回答

0

没有,既没有属性,也没有任何其他特定于.NET可以在客户端和服务之间使用。请参阅“Basics: How Web Services Work”了解为什么不。

0

如果你在寻找什么是控制在服务器上的这个元数据,而无需更新客户端应用程序的方式,那么我不认为属性是一个解决方案。首先,属性是在编译时定义的,我认为即使您有能力这样做,您也不应该在运行时对它们进行操作。另一个问题是,Web服务实际上没有任何与.Net属性相对应的本机机制,因此没有内置的方式来传递这些属性所代表的元数据。

如果你真的想通过属性来定义这个元数据,那么你可以把你的OrderCost类单独的共享组件,同时为Web服务和客户端应用程序消耗。这里的缺点是,如果要更改在属性中定义的值,则客户端应用程序在获取更新的DLL之前不会看到这些更改。另外,如果你希望客户端应用程序完全不知道元数据的任何改变,那么我会考虑创建一些Display类,它包含你想要的显示信息并作为结果。

例如,下面的代码示出了一个名为MyResultObject类,其中包含一个单一的“显示”对象和“数据”的对象的列表。显然,命名空间,类名,以及这些类的组织是由你:

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; } 
    } 
} 

我想你应该问自己,不过,如果它是有道理的服务,以有关于它的数据如何将任何知识显示。相反,客户使用不理解的数据是否合理,以便它需要元数据才能正确处理数据?在某些情况下,这可能正是你想要做的,但可能不是一般情况下,我想。无论如何,这取决于您的应用程序的正确方法。

+0

像您可以与WCF不能在ASMX Web服务共享的类型。 – 2010-06-19 08:37:50

+0

我的答案应该更加明确。我想到的是由客户端和服务器共同使用一个通用程序集,但这需要专门编写Web服务代理以使用该程序集中的类,而不仅仅是从WSDL生成代码。我认为这是可能的,但除了WSDL之外,还需要客户端和服务器之间更多的耦合,在我看来,这并不是一个理想的解决方案。 – 2010-06-21 12:27:55

相关问题