首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight中不工作的DisplayAttribute名称属性

Silverlight中不工作的DisplayAttribute名称属性
EN

Stack Overflow用户
提问于 2013-03-08 11:29:06
回答 1查看 598关注 0票数 6

我将DataGrid.ItemsSource属性绑定到List<PersonDetails>对象。我正在通过Silverlight支持的WCF服务获取数据。因此PersonDetails类是在Web中实现的。如果类位于Silverlight项目中,则每个DataGrid的头文本都会按我的需要进行更改。但是我不能在web服务中使用这个类。唯一的解决方案是在这两个项目中添加相同的类。但是,还有别的办法吗?

这门课看起来是这样的:

代码语言:javascript
复制
[DataContract]
public class PersonGeneralDetails
{
    // Properties

    [DataMember]
    [DisplayAttribute(Name = "Sira")]
    public int RowNumber { get; set; }

    [DataMember]
    [DisplayAttribute(Name = "Seriyasi")]
    public string SerialNumber { get; set; }
}

在web项目中似乎没有生成属性。我知道我可以使用DataGrid事件更改标题文本。但我想让它使用属性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 12:14:26

问题是WCF DataContract是一种可以跨语言和跨平台使用的互操作机制。

如果您查看由DataContractSerializer (或其在System.Runtime.Serialization.dll中的代码,特别是InternalWriteObjectXyz()方法中的代码)生成的序列化数据,您将看到它只是将值序列化为一个简单的XML消息。没有任何与.NET框架相关的内容,因此所有类型的属性,无论是自定义的还是编译器生成的,都将被删除,甚至不会被客户端接收。

它可以创建数据的副本,并将其从服务器发送到客户端,然后客户端将创建一个具有相同签名的新类。注意:一个具有相同签名的新类,不仅仅是原始类的一个新对象。

当然有一些解决办法。您可以编写、您自己的序列化程序(参见this post on SO中的示例)或您自己的ISerializationSurrogate

如果您可以向客户端部署/共享程序集( deploy /),那么您就有了一个很好的解决办法:只需部署它们,DataContractSerializer就会在客户端上构建正确的对象(与服务器上的对象完全相同,并包含其所有属性)。记住:

  • 如果自定义属性来自运行时值(例如,由于本地化),那么它们将在客户机上解析,而不是在服务器上解析(因为属性将在客户机上创建,它们的值将不会包含在XML消息中)。
  • 在客户端应用程序中,需要添加对包含类型的程序集的引用。
  • 添加服务引用时,必须指示VS使用它们(否则会创建代理),在“服务引用设置”对话框中,在引用程序集中选择重用类型(您可以将其限制在只希望共享的程序集)。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15292947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档