我将DataGrid.ItemsSource属性绑定到List<PersonDetails>对象。我正在通过Silverlight支持的WCF服务获取数据。因此PersonDetails类是在Web中实现的。如果类位于Silverlight项目中,则每个DataGrid的头文本都会按我的需要进行更改。但是我不能在web服务中使用这个类。唯一的解决方案是在这两个项目中添加相同的类。但是,还有别的办法吗?
这门课看起来是这样的:
[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事件更改标题文本。但我想让它使用属性。
发布于 2013-03-08 12:14:26
问题是WCF DataContract是一种可以跨语言和跨平台使用的互操作机制。
如果您查看由DataContractSerializer (或其在System.Runtime.Serialization.dll中的代码,特别是InternalWriteObjectXyz()方法中的代码)生成的序列化数据,您将看到它只是将值序列化为一个简单的XML消息。没有任何与.NET框架相关的内容,因此所有类型的属性,无论是自定义的还是编译器生成的,都将被删除,甚至不会被客户端接收。
它可以创建数据的副本,并将其从服务器发送到客户端,然后客户端将创建一个具有相同签名的新类。注意:一个具有相同签名的新类,不仅仅是原始类的一个新对象。
当然有一些解决办法。您可以编写、您自己的序列化程序(参见this post on SO中的示例)或您自己的ISerializationSurrogate。
如果您可以向客户端部署/共享程序集( deploy /),那么您就有了一个很好的解决办法:只需部署它们,DataContractSerializer就会在客户端上构建正确的对象(与服务器上的对象完全相同,并包含其所有属性)。记住:
https://stackoverflow.com/questions/15292947
复制相似问题