Что значит поместить 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 (взято из статьи)