![](/img/trans.png)
[英]DisplayAttribute: cannot retrieve property 'Name' because localization failed
[英]DisplayAttribute name property not working in Silverlight
我將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; }
}
似乎在Web項目中不生成屬性。 我知道我可以使用DataGrid事件更改標題文本。 但我想使用屬性使其工作。
問題是WCF DataContract
是一種可互操作的機制,可以跨語言和平台使用。
如果您查看由DataContractSerializer
(或其在System.Runtime.Serialization.dll
代碼,特別是InternalWriteObjectXyz()
方法)生成的序列化數據,您將看到它只是將值序列化為簡單的XML消息。 沒有任何與.NET Framework相關的內容,因此所有類型的屬性(包括自定義和編譯器生成的)都將被剝離,甚至不會被客戶端接收。
它可以創建數據副本並將它們從服務器發送到客戶端,然后客戶端將創建一個具有相同簽名的新類 。 注意:具有相同簽名的新CLASS , 不僅僅是原始類的新對象 。
當然,有一些解決方法。 您可以編寫自己的序列化程序 (請參閱SO上的這篇文章作為示例)或您自己的ISerializationSurrogate
。
如果你可以將你的程序集部署/共享給你的客戶端你有一個很好的解決方法:只需部署它們, DataContractSerializer
將在你的客戶端上構建正確的對象(與服務器上的對象完全相同,具有所有屬性)。 請記住:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.