Что значит поместить DataMemberAttribute в элемент интерфейса?
Что значит поставить DataMemberAttribute на члене интерфейса? Как это влияет на производные классы?
3 ответов
как показано в следующей подписи, атрибут DataMember не наследуется
[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field, Inherited = false,
AllowMultiple = false)]
public sealed class DataMemberAttribute : Attribute
таким образом, очень мало смысла украшать элементы интерфейса этим атрибутом, поскольку вам также придется украшать элементы реализующих классов этим атрибутом.
в моем случае я использую эти атрибуты с моими службами WCF. Когда я делаю интерфейс для веб-службы WCF, я делаю это, определяя интерфейс таким образом:
Imports System.ServiceModel
<ServiceContract()>
Public Interface IClientContract
<OperationContract()>
Function GetClientList() As IList(Of POCOClients)
End Interface
Как вы можете видеть, clien этой службы получит класс POCOCLient. Затем мне нужно украсить класс POCOClient атрибутами, которые вы запрашиваете, таким образом, чтобы позволить классу сериализоваться должным образом и отправить vía WCF.
<DataContract()>
<MetadataType(GetType(POCOAuthorizedkeys.POCOAuthorizedkeysMetaData))>
Public Class POCOAuthorizedkeys
<DataMember()>
<DisplayName("Id")>
Public Property Id As Integer
<DataMember()>
<DisplayName("IdPackage")>
Public Property IdPackage As Integer
<DataMember()>
<DisplayName("AuthorizedKey")>
Public Property AuthorizedKey As String
<DataMember()>
<DisplayName("IdUnthrustedClient")>
Public Property IdUnthrustedClient As Nullable(Of Integer)
End Class
атрибут [DataMember] при применении к члену типа указывает, что член является частью контракта данных. Когда этот атрибут применяется к полю или свойству явно, он указывает, что значение члена будет сериализовано объектом DataContractSerializer (взято из статьи)