Far*_*yev 6 c# asp.net silverlight wcf
我绑定DataGrid.ItemsSource属性List<PersonDetails>对象.我通过支持Silverlight的WCF服务获取数据.所以这个PersonDetails类是在Web Project中实现的.如果类位于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; }
}
Run Code Online (Sandbox Code Playgroud)
似乎在Web项目中不生成属性.我知道我可以使用DataGrid事件更改标题文本.但我想使用属性使其工作.
问题是 WCF是一种可跨语言DataContract和平台使用的互操作机制。
如果您查看由DataContractSerializer(或其代码System.Runtime.Serialization.dll,特别是InternalWriteObjectXyz()方法)生成的序列化数据,您将发现它只是将值序列化为简单的 XML 消息。与 .NET Framework 相关的任何内容都不会存在,因此所有类型的属性(自定义属性和编译器生成的属性)都将被删除,甚至不会被客户端接收。
它可以创建数据的副本并将其从服务器发送到客户端,然后客户端将创建具有相同签名的新类。注意:具有相同签名的新类,而不仅仅是原始类的新对象。
当然,有一些解决方法。您可以编写自己的序列化程序(有关示例,请参阅SO 上的这篇文章ISerializationSurrogate)或您自己的.
如果您可以将程序集部署/共享给客户端,那么您就有了一个很好的解决方法:只需部署它们即可DataContractSerializer在客户端上构建正确的对象(与服务器上的对象完全相同,具有所有属性)。只要记住:
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |