none
DataContract 与 DataContractFormat RRS feed

  • 问题

  • 1、DataContract 与 DataContractFormat 有何区别?

    2、我添加了using System.Runtime.Serialization;命名空间还是没有DataContract特性,什么原因?

    3、在WCF服务端编程中,DataContract和DataContractFormat有何区别?

    2011年4月19日 7:48

答案

  • 1、前者是指示数据契约如何定义,后者指示 Windows Communication Foundation (WCF) 基础结构使用 DataContractSerializer。 2、Namespace: System.Runtime.Serialization,Assembly: System.Runtime.Serialization (in System.Runtime.Serialization.dll),添加对这个程序集的引用。
    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。
    • 已标记为答案 woxf 2011年4月20日 2:07
    2011年4月19日 12:35

全部回复

  • 1、前者是指示数据契约如何定义,后者指示 Windows Communication Foundation (WCF) 基础结构使用 DataContractSerializer。 2、Namespace: System.Runtime.Serialization,Assembly: System.Runtime.Serialization (in System.Runtime.Serialization.dll),添加对这个程序集的引用。
    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。
    • 已标记为答案 woxf 2011年4月20日 2:07
    2011年4月19日 12:35
  • 已解决,谢谢!
    2011年4月20日 0:39
  • 两者作用不一样。

    1.DataContract 用于定义数据契约,DataContractFormat 用于配置服务或者操作契约。

    这里是参考资料

    http://msdn.microsoft.com/zh-cn/library/system.servicemodel.datacontractformatattribute.aspx

    http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datacontractattribute.aspx

    2.使用程序集应该是System.ServiceModel

    3.参考1.

     

     
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年4月20日 1:56
    版主
  • 已解决,谢谢!

    最好分享一下经验
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年4月20日 1:57
    版主
  •  

    1、DataContractFormat 用于配置服务或者操作契约。是指该服务或操作里的数据可以进行序列化吗?它和XmlSerializerFormatAttribute又有什么区别呢?MSDN里说的好像不是很清楚

    2、DataContractFormat的命名空间是System.ServiceModel;DataContract的命名空间是System.Runtime.Serialization

    3、服务操作里面的数据必须是数据契约里面的数据吗,对这点我不明确。在服务操作里可以使用这样的数据么?

      [DataContractFormat]
      public class DC100Chanel
      {
        /// <summary>
        /// 通道名
        /// </summary>
        public String Name="";
        /// <summary>
        /// 通道号
        /// </summary>
        public String Number="";
        /// <summary>
        /// 测量值
        /// </summary>
        public Double Value=0.0;
      }
    如果可以,那是否可以不用定义数据契约了?
    2011年4月20日 5:54
  • 我没试过,不过我认为不行,你必须向系统指定如何对消息进行序列化,或者自己解决序列化问题。

    MSDN是说的不清楚,我感觉像是干涉默认序列化的行为。


    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。
    2011年4月20日 6:00
  • 我看到过一个例子,一部分是这样的方式 是这样定义的

     [DataContractFormat]
     public class DC100Chanel
     {
      /// <summary>
      /// 通道名
      /// </summary>
      public String Name="";
      /// <summary>
      /// 通道号
      /// </summary>
      public String Number="";
      /// <summary>
      /// 测量值
      /// </summary>
      public Double Value=0.0;
     }

    一部分是直接在服务操作里调用另外的全局变量里面的数据,是可以的。

    但是如果这样可以的话,那是不是就不用定义数据契约了。

     

     

     

     

    2011年4月20日 11:22
  • 一部分是这样

         public Object[] GetData()
            {
                Object[] data = new Object[]
                {
                    GlobalInfo.OUTDRY,
                    GlobalInfo.OUTWET,
                    GlobalInfo.INNERDRY,
                    GlobalInfo.INNERWET,
                    GlobalInfo.AIRDRY,
                    GlobalInfo.AIRWET,
                    GlobalInfo.STATIC_PD,
                    GlobalInfo.STATIC_P,
                    GlobalInfo.WT230V,
                    GlobalInfo.WT230A,
                    GlobalInfo.WT230P,
                    GlobalInfo.WT230Hz,
                    GlobalInfo.AIR_V,
                    GlobalInfo.C_Cool,
                    GlobalInfo.EER
                };
                return data;
            }

    GlobalInfo是一个定义全局变量的类

     

    2011年4月20日 11:27
  • 类似于消息契约的MessageFormatter。我认为DataContractFormat是将当前数据转换为基于当前服务操作的数据,所以上述定义应该是可行的
    2011年4月21日 4:33