类型是否可以默认序列化?

时间:2014-01-03 18:54:41

标签: c# wcf xsd

我正在阅读这本书Learning WCF by Michele Leroux Bustamante。其中一个实验室正在处理DataContracts,我没有看到本书中描述的应用程序的预期行为。基本上应抛出异常,因为类型未定义为DataContract且无法序列化。

类型LinkItem定义如下,没有DataContract或DataMember属性:

public class LinkItem
{
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    // Other properties omitted for simplicity
}

托管服务的代码如下:

using (ServiceHost host = new ServiceHost(typeof(GigManager.GigManagerService)))
{
    host.Open();
    // Code omitted for simplicity
}

当我运行应用程序时,没有抛出任何异常。根据这本书,当我在http://localhost:8000/?xsd=xsd2访问服务的XSD架构时,我应该只在应用DataContract属性时看到<xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/ContentTypes">。我看到相同的targetNamespace定义是否将DataContract属性应用于类。

我的猜测是.NET Framework中的目标版本(2.0)和我正在运行的版本(4.5)之间的某些内容已经发生了变化。由于我刚刚开始掌握WCF,我无法肯定地说。任何更有知识的人都可以澄清是否是这种情况或以其他方式解释为什么不抛出异常?

1 个答案:

答案 0 :(得分:3)

来自MSDN

  

在   DataContractSerializer   旨在序列化数据合同类型。但是,它支持   许多其他类型,可以被认为具有隐含   数据合同。以下是可以使用的完整类型列表   序列:

     
      
  • 所有具有不带参数的构造函数的公开可见类型。 [...]

  •   
  • 数据合约类型。 [...]

  •   
  • 收藏类型。 [...]

  •   
  • 枚举类型。 [...]

  •   
  • .NET Framework基元类型。 [...]

  •   
  • 其他原始类型。 [...]

  •   
  • 使用SerializableAttribute属性标记的类型。[...]

  •   

有关详细信息,请参阅MSDN文章。