WCF DataContract属性

时间:2013-08-28 11:50:56

标签: 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]属性,我也没有收到任何错误。

请通过示例给我一个简短的解释,以便我能够理解何时提供该属性以及何时不提供该属性。

谢谢, Satya Pratap。

2 个答案:

答案 0 :(得分:1)

DataContractSerializer如果提供默认构造函数,则可以处理没有DataContract属性的类。有关详细信息,请参阅MSDN documentation

答案 1 :(得分:1)

从.NET 3.5 Service Pack 1 开始,您可以省略(不使用)[DataContract][DataMember]属性。如果你这样做,那么WCF中的DataContractSerializer就像XML序列化器一样 - 它只会序列化所有公共属性。

我更倾向于明确地使用[DataContract][DataMember] - 它让我有机会指定选项(比如数据协定的XML命名空间,[DataMember]的顺序)并让它我,例如也从序列化中排除某些属性。

只要您在一个媒体资源上开始使用[DataMember],就会查看 那些用[DataMember]修饰的属性,以便进行WCF序列化。