2013-08-28 2 views
0

У меня есть вопрос о атрибуте [DataContract].WCF DataContract Атрибут

Я написал свой код, как показано ниже: здесь я не использую атрибут [DataContract] для моего тестового класса.

class test 
    { 
     [Datamember] 
     public string Strproperty 
     { 
      get; 
      set; 
     } 
     [Datamemer] 
     public string Strproperty2 
     { 
      get; 
      set; 
     } 
    } 


class checktotal:Iservice 
    { 
    public string testmethod(test obj) 
     { 
      return obj.Strproperty+Strproperty2; 
     } 
    } 

Для этого я отправляю данные от клиента. Я правильно получаю значения.

Здесь необходимо использовать атрибут [DataContract] для этого тестового класса?

Если я удалил [Datamember] для свойства тестового класса, возникает ошибка при отправке с клиента. Но я не получаю никаких ошибок, даже если я не использую атрибут [DataContract].

Просьба привести краткое объяснение с примером, чтобы я мог понять, когда указывать этот атрибут и когда этот атрибут не указан.

Thanks, Satya Pratap.

ответ

1

DataContractSerializer может обрабатывать классы, которые не имеют атрибута DataContract, если они предоставляют конструктор по умолчанию. См. MSDN documentation для более подробной информации.

1

С .NET 3.5 Service Pack 1, вы можете пропустить (не использовать) атрибуты [DataContract] и [DataMember]. Если вы это сделаете, то DataContractSerializer в WCF будет вести себя точно так же, как сериализатор XML - он будет сериализовать все общедоступные свойства.

Я предпочитаю использовать [DataContract] и [DataMember] явно в любом случае - это дает мне возможность указать параметры (например, пространство имен XML контракта обработки данных, порядок в [DataMember]) и это позволяет мне, например, также исключают определенные свойства из сериализации.

Как только вы начнете использовать [DataMember] на одно свойство, то только те свойства, украшенные [DataMember] будут рассматриваться для сериализации WCF.

+0

Вы имеете в виду, что мы можем назвать этот класс атрибутом [DataContractSerializer]? Объясните это немного кратко. Я использую .net 4.0 framework. – Balu

+0

@Balu: ** EITHER ** вы используете ** ничего вообще ** ->, тогда WCF DataContractSerializer работает как XmlSerializer; ** ИЛИ ТОГДА ** вы используете '[DataContract]' и '[DataMember]' везде в своем классе. Выбери один. Вы не можете смешивать два подхода. –