DataContractAttribute 与 DataMenberAttribute

DataContractAttribute该特性只能用于枚举、类和结构体,而不能用于接口;又因为DataContractAttribute是不可以被继承的,所以要所有作为数据契约的类型自身必须有这么一个特性;而且一个类型上只能有一个DataContractAttribute特性;(因为DataContractAttribute的AttributeUsage中AllowMultiple属性为False);DataContractAttribute仅仅包含三个属性成员;分别为Name(数据契约名称)、Namespace(命名空间)、IsReference(表示在进行序列化的时候是否保持对象现有的结构,该属性默认值为False);

DataMenberAttribute该特性只能应用在字段和属性上;其有四个属性:分别为Name(数据成员的名称,默认为字段或属性的名称)、Order(相应的数据成员在最终序列化的XML中出现的位置,Order值越小越靠前默认值为-1)、IsRequired(表明属性成员是否是必需的成员,默认值为false)、EmitDefaultValue(表明在数据成员的值等级于默认值的情况下,是否还需要将其序列化到最终的XML中,默认值为true;表示默认值会参与序列化)

数据契约和数据成员序列化只跟是否应用的DataContractAttribute 与 DataMenberAttribute特性有关;与类型或成员的限制修饰符无关(public,private等);DataContractSerializer具有一个只读的MaxItemsInObjectGraph属性表示允许被序列化或反序列化对象的数量上限(可以防止黑客通过生成大容量的数据频繁地对服务器发送请求,最终导致服务器不堪重负而崩溃);[P180]

已知类型

由于托管对象的结构是通过CLR类型来描述,所以DataContractAttribute在进行序列化的时候必须先确定所有对象的真实类型;NET的类型可以分为声明类型和真实类型两种;比如类型实现的接口或抽象类,当我们使用基于接口或抽象类创建的DataContractAttribute去序列化一个实现了该接口或继承该抽象类的实例时,往往会因为无法识别对象的真实类型造成不能正常序列化;方法一:可以在数据契约中声明其类型[KnowType(typeof(类型))];方法二:可以采用配置[P189];方法三:可以采用ServiceKnownTypeAttribute特性;[P191]

WCF学习笔记之序列化的更多相关文章

  1. WCF学习笔记——对象序列化

    当试图通过Web服务.WCF这样的远程处理技术将一个对象复制到远端时,具有对类型序列化的能力很关键. 一 序列化基础 序列化描述了持久化或传输一个对象的状态到流的过程(.NET将对象序列化到流,流是字 ...

  2. WCF学习笔记之事务编程

    WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...

  3. WCF 学习笔记之异常处理

    WCF 学习笔记之异常处理 1:WCF异常在配置文件 <configuration> <system.serviceModel> <behaviors> <s ...

  4. WCF学习笔记之传输安全

    WCF学习笔记之传输安全 最近学习[WCF全面解析]下册的知识,针对传输安全的内容做一个简单的记录,这边只是简单的记录一些要点:本文的内容均来自[WCF全面解析]下册: WCF的传输安全主要涉及认证. ...

  5. WCF 学习笔记之双工实现

    WCF 学习笔记之双工实现 其中 Client 和Service为控制台程序 Service.Interface为类库 首先了解契约Interface两个接口 using System.Service ...

  6. EF + WCF学习笔记——EF实体类序列化

    项目中如果 EF + WCF 结合使用,模式应该是EF负责读取数据库,传递数据对象给WCF,WCF再将这些对象传送给客户端.因为WCF传送的对象需要序列化,而EF默认生成的对象并没有序列化,很可能会出 ...

  7. WCF学习笔记(2)——使用IIS承载WCF服务

    通过前面的笔记我们知道WCF服务是不能独立存在,必须“寄宿”于其他的应用程序中,承载WCF服务的应用程序我们称之为“宿主”.WCF的多种可选宿主,其中比较常见的就是承载于IIS服务中,在这里我们来学习 ...

  8. WCF学习笔记(基于REST规则方式)

    一.WCF的定义 WCF是.NET 3.0后开始引入的新技术,意为基于windows平台的通讯服务. 首先在学习WCF之前,我们也知道他其实是加强版的一个面向服务(SOA)的框架技术. 如果熟悉Web ...

  9. WCF学习笔记1--发布使用配置文件的服务

    关于WCF的入门网上资料很多,可以参考蒋金楠老师的博客http://www.cnblogs.com/artech/archive/2007/02/26/656901.html,我是从这篇博客开始学习的 ...

随机推荐

  1. BZOJ4029 HEOI2015定价

    贪心. 每次将最后一个非零位加一判断即可. 一开始想少了,只关心把最后一位变成5了,其实可以都变的. #include<bits/stdc++.h> using namespace std ...

  2. 颓废选手在 Ubuntu/Noilinux 下的生存指北

    颓废选手在 Ubuntu/Noilinux 下的生存指北 Hint: 这里的 "#" 都是假注释,复制的时候记得删除 一些基本的生存命令 ctrl + alt + t #调出终端 ...

  3. POJ3710 Christmas Game 博弈论 sg函数 树的删边游戏

    http://poj.org/problem?id=3710 叶子节点的 SG 值为0:中间节点的SG值为它的所有子节点的SG值加1后的异或和. 偶环可以视作一个点,奇环视为一条边(连了两个点). 这 ...

  4. PHP -- 类和对象基础入门

         本文目录:    创建简单类和对象 继承 抽象类 接口 构造方法 析构函数     1. 创建简单类    创建一个People的类,在这里有四个要点说明一下: 第一个是在PHP中,访问属性 ...

  5. CentOS下的RPM包制作教程收集(rpmbuild)

    http://www.jinbuguo.com/redhat/rpmbuild.html(中文手册) https://www.linuxidc.com/Linux/2016-09/134955.htm ...

  6. Jackson工具类使用及配置指南、高性能配置(转)

    Jackson使用工具类 通常,我们对JSON格式的数据,只会进行解析和封装两种,也就是JSON字符串--->Java对象以及Java对象--->JSON字符串. public class ...

  7. Internationalization composition diagram

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHJvdWJsZXNob290ZXI=/font/5a6L5L2T/fontsize/400/fill/I0 ...

  8. 终于理解了什么是LGPL

    GPL 我 们很熟悉的Linux就是采用了GPL.GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样.GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费 ...

  9. rt-80启动tomcat

    1 #!/bin/sh 2 cd /mnt/tomcat/tomcat_8082; 3 ps -ef|grep /tomcat_8082/ |awk '{print $2}'|xargs kill - ...

  10. Index downloads are disabled, search results may be incomplete.

    20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送) 国内私募机构九鼎控股打造,九鼎投资是在全国股 ...