Что значит поместить 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
Как видите, клиент этого сервиса получит класс POCOCLient. Затем мне нужно украсить класс POCOClient атрибутами, которые вы запрашиваете, таким образом, чтобы класс был правильно сериализован и отправлен через 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 (взято из Article)