首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Seebug漏洞平台

    .Net 反序列化学习之 DataContractSerializer

    DataContractSerializer 的反序列化漏洞 与 XmlSerializer 的也很相似,都需要控制传入的目标类型以及xml数据。 DataContractSerializer 的两种漏洞情形 构造函数之一: public DataContractSerializer (Type type, 指定该DataContractSerializer实例 用于对什么类进行序列化和反序列化。 DataContractSerializer 会依据传入的type 生成专门的动态代码,并使用这些动态代码完成序列化和反序列化。 常见的DataContractSerializer 漏洞的原理是第一个参数 type 可控,此时我们可以让DataContractSerializer 反序列化出我们想要的类型。

    1.4K20发布于 2021-06-17
  • 来自专栏大内老A

    WCF技术剖析之十三:序列化过程中的已知类型(Known Type)

    DataContractSerializer承载着所有数据契约对象的序列化和反序列化操作。 在上面一篇文章(《数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)》)中,我们谈到DataContractSerializer基本的序列化规则;如何控制 为了确保DataContractSerializer的正常序列化和反序列化,我们需要将“未知”类型加入DataContractSerializer“已知”类型列表中。 图1 “未知”类型导致的序列化异常 二、DataContractSerializer的已知类型集合 解决上面这个问题的唯一途径就是让DataContractSerializer能够识别Order类型, 不过基于接口的DataContractSerializer与基于抽象数据契约类型的DataContractSerializer,在进行序列化时表现出来的行为是不相同的。

    1.3K110发布于 2018-01-16
  • 来自专栏技术博客

    菜菜从零学习WCF十(序列化)

    前言  本次课程的主要内容包括以下四格部分:DataContractSerializer、序列化、反序列化、XmlSerializer 第一部分--DataContractSerializer  Windows Communication Foundation(WCF)包括新序列化引擎DataContractSerializerDataContractSerializer可在.NET Framework对象和XML之间进行双向转换。 创建DataContractSerializer实例 1.指定根类型   根类型是序列化或反序列化实例的类型。 也设置为true的DataContractSerializer实例进行访问。   

    1.7K30发布于 2018-09-11
  • 来自专栏大内老A

    WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer

    WCF采用数据契约序列化器(DataContractSerializer)作为默认的序列化器。 接下来我们着重谈谈DataContractSerializer和基于DataContractSerializer采用的序列化规则。先来看看DataContractSerializer的定义。 1: public sealed class DataContractSerializer : XmlObjectSerializer 2: { 3: //其他成员 4: public DataContractSerializer 三、基于DataContractSerializer的序列化规则 与在第一节介绍XmlSerializer的序列化规则一样,现在我们通过一个具体的例子来介绍DataContractSerializer 1: public sealed class DataContractSerializer : XmlObjectSerializer 2: { 3: //其他成员 4: public DataContractSerializer

    2.1K90发布于 2018-01-16
  • c#复杂XML反序列化为实体对象两种方式

    反序列化XML可以采用多种方式,但主要有两种常见的方法:使用XmlSerializer和使用DataContractSerializer。本文将详细介绍这两种方法,并提供示例代码。 使用DataContractSerializer进行反序列化DataContractSerializer是另一种用于反序列化XML数据的.NET类。 基本用法与XmlSerializer类似,你需要定义一个与XML结构相匹配的C#类,并使用DataContractSerializer来反序列化XML数据。 处理复杂XML对于复杂的XML数据,DataContractSerializer同样可以处理。 性能考量在选择使用XmlSerializer还是DataContractSerializer时,性能是一个重要的考虑因素。

    5K00编辑于 2024-10-11
  • 来自专栏大内老A

    我的WCF之旅(4):WCF中的序列化[上篇]

    DataContractSerializer Serialization 是通过Serializer来完成的,在WCF中,我们有3种不同的Serializer——DataContractSerializer 由于DataContractSerializer和NetDataContractSerializer基本上没有太大的区别,我们只讨论DataContractSerializer和XMLSerializer 其中DataContractSerializer为WCF默认的Serializer,如果没有显式定采用另外一种Serializer,WCF会创建一个DataContractSerializer 序列化NET 首先我们来讨论DataContractSerializer采用怎样的一种Mapping方式来把.NET Object转化成XML。我们照例用实验来说明问题。 _quantity);         }     } } 使用DataContractSerializer序列化.NET Object。

    1.1K110发布于 2018-01-16
  • 来自专栏菩提树下的杨过

    再谈Silverlight中的对象序列化/反序列化

    Json的开源项目 http://json.codeplex.com/ 同样可用于Silverlight的序列化 2.XmlSerializer序列化方式 这个在上篇文章里已经讲过了,不再重复 3.DataContractSerializer  ser = new DataContractSerializer(typeof(Person));             ser.WriteObject(ms, _person); byte[]  ; string _serializeString = Encoding.UTF8.GetString(array, 0, array.Length); //反序列化             DataContractSerializer  ser2 = new DataContractSerializer(typeof(Person));             MemoryStream ms2 = new MemoryStream(Encoding.UTF8 "System.Json.dll",序列化后的字节数最少; XmlSerializer方式,最终会引入314k的"System.Xml.Serialization.dll",序列化后的字节数也最多; DataContractSerializer

    1.5K80发布于 2018-01-22
  • 来自专栏大内老A

    一个关于解决序列化问题的编程技巧

    1: public static T Deserialize<T>(string fileName) 2: { 3: DataContractSerializer serializer = new DataContractSerializer(typeof(T)); 4: using (XmlReader reader = new XmlTextReader(fileName 如果对DataContractSerializer序列化器的序列化/反序列化规则的有所了解的话,应该知道:对于数据契约(DataContract)基于属性(Property)的数据成员(DataMember 这就是要了解DataContractSerializer序列化器的序列化和发序列化规则了。在默认的情况下,DataContractSerializer是按照数据成员的名称的顺序进行序列化的。 如果在不更改数据成员名称的前提下让属性Value先于ReadOnly被序列化,需要用到DataContractSerializer另一条反序列化规则:我们可以通过DataMemberAttribute特性的

    92060发布于 2018-01-16
  • 来自专栏大内老A

    WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    以上面Contact和Customer为例,在正常的情况下,DataContractSerializer针对类型Customer对一个真正的Customer对象进行序列化,现在要求的是通过DataContractSerializer ; 69: } 70: } 为了演示ContractSurrogate在序列化和反序列化中所起的作用,创建了Serialize<T>和Deserialize<T>两个辅助方法,通过创建DataContractSerializer 方法中的dataContractSurrogate参数被传入DataContractSerializer的构造函数中。 serializer = new DataContractSerializer(typeof(T), null, int.MaxValue, false, false, dataContractSurrogate serializer = new DataContractSerializer(typeof(T), null, int.MaxValue, false, false, dataContractSurrogate

    1.1K80发布于 2018-01-16
  • 来自专栏大内老A

    WCF技术剖析之十六:数据契约的等效性和版本控制

    那么在这种数据成员缺失的情况下,DataContractSerializer又会表现出怎样的序列化与反序列化行为呢? 1: public static T Deserialize<T>(string fileName) 2: { 3: DataContractSerializer serializer = new WCF允许我们通过自定义特性的方式注册序列化的回调方法,这些DataContractSerializer在进行序列化或者反序列化过程中,会回调你注册的回调方法。 如果DataContractSerializer按照CustomerV2的定义对CustomerV1的对象进行序列化,那么XML中将不会包含Address成员;同理,如果DataContractSerializer 如果将其设为true,DataContractSerializer在反序列化的时候会忽略多余的XML元素,在序列化时会丢弃ExtensionData属性中保存的值。

    1.2K100发布于 2018-01-16
  • 来自专栏大内老A

    [WCF 4.0新特性] 默认绑定和行为配置

    另一个为服务行为,该行为将默认使用的DataContractSerializer的MaxItemsInObjectGraph属性设置为最大值,以实现对大数据对象序列化和反序列化。 behaviors> 5: <endpointBehaviors> 6: <behavior name="defaultBehavior"> 7: <dataContractSerializer behaviors> 5: <serviceBehaviors> 6: <behavior> 7: <dataContractSerializer behaviors> 5: <serviceBehaviors> 6: <behavior> 7: <dataContractSerializer behaviors> 5: <serviceBehaviors> 6: <behavior> 7: <dataContractSerializer

    963110发布于 2018-02-07
  • 来自专栏技术博客

    Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

    默认情况下,XmlMediaTypeFormatter使用DataContractSerializer类来执行序列化。 如果喜欢,你可以将XmlMediaTypeFormatter配置成使用XmlSerializer而不是DataContractSerializer。 XML Serialization——XML序列化 本小节描述使用默认DataContractSerializer的时,XML格式化器的一些特殊行为。 默认情况下,DataContractSerializer行为如下:   序列化所有public读/写属性和字段。为了忽略一个属性或字段,请用IgnoreDataMember注解属性修饰它。 你可以为此对象使用XmlSerializer,而对其它类型继续使用DataContractSerializer。 为了设置用于特殊类型的XML序列化器,要调用SetSerializer。

    3.1K30发布于 2018-08-31
  • 来自专栏大内老A

    WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)

    比如我们现在需要通过DataContractSerializer序列化一个Customer对象的集合,Customer类型定义如下。 对象使用的类型不一样,但是最终序列化生成出来的XML却是完全一样的,也就是说DataContractSerializer在序列化这3种类型对象时,采用完全一样的序列化规则。 当基于这3种集合类型的DataContractSerializer被创建出来后,由于元素类型已经明确了,所以能够按照元素类型对应的数据契约的定义进行合理的序列化工作。 由于创建基于IEnumerable和IList的DataContractSerializer的时候,集合元素类型是不可知的,所以需要将潜在的元素类型添加到DataContractSerializer的已知类型列表中 那么在WCF下对自定义集合类型具有哪些限制,DataContractSerializer对于自定义集合类型又具有怎样的序列化规则呢?我们接下来就来讨论这些问题。

    1.9K70发布于 2018-01-16
  • 来自专栏大内老A

    WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]

    由于此操作需要对错误明细对象进行反序列化,所以需要指定错误明细类型对应的序列化器,默认情况下采用的是DataContractSerializer。 ; 22: MessageFault fault = MessageFault.CreateFault(code, reason, detail, new DataContractSerializer ; 18: MessageFault fault = MessageFault.CreateFault(code, reason, detail, new DataContractSerializer MessageFault Serialize(FaultException faultException, out string action); } 由于WCF将绝大部分序列化和反序列化的工作都交付给两个序列化器:DataContractSerializer 它们直接继承自FaultFormatter,分别采用DataContractSerializer和XmlSerializerObjectSerializer作为相应的序列化器。

    1.8K110发布于 2018-01-16
  • 来自专栏dotnet & java

    WCF入门 (14)

    <behavior name="mexBehavior"> <serviceMetadata httpGetEnabled="true" /> <dataContractSerializer ignoreExtensionDataObject ="true"/> </behavior> </serviceBehaviors> </behaviors> 给behaviors节点dataContractSerializer

    34920发布于 2018-08-24
  • 来自专栏JusterZhu

    .NET MAUI 性能提升(下)

    主要内容 ❖ 应用程序大小的改进 修复默认的MauiImage大小 删除Application.Properties 和DataContractSerializer 修剪未使用的HTTP实现 ❖ .NET maui/pull/4759 dotnet/maui#6419: https://github.com/dotnet/maui/pull/6419 ▌删除Application.Properties 和DataContractSerializer 这在内部使用了DataContractSerializer,这对于自包含和修剪的移动应用程序不是最佳选择。 简单地删除这个API和所有DataContractSerializer的使用,在android上可以提高约855KB,在iOS上提高约1MB。 /#remove-applicationproperties-and-datacontractserializer?

    3.4K30编辑于 2022-12-07
  • 来自专栏大内老A

    《WCF技术剖析(卷1)》(修订版)目录

    DataContractSerializer 5.3.1. DataContractSerializer的序列化规则 5.3.2. 如何限定序列化对象的数量? 5.3.3. DataContractSerializer的已知类型集合 5.4.3. 基于接口的序列化 5.4.4. KnownTypeAttribute 5.4.5. DataContractSerializer还是XmlSerializer? 5.7.3. 实例演示:通过自定义消息格式化器压缩消息(S521) 第6章 消息 (Message) 6.1.

    1.5K80发布于 2018-01-15
  • 来自专栏dotnet & java

    WCF入门(6)

    如果不特殊指定,WCF用DataContractSerializer来序列化object(终于出现标题上的关键字了)。 那是因为,从framework 3.5开始,如果我们没有使用DataContract 或者DataMember 特性,那么WCF的DataContractSerializer会自动把所有的public属性按照字典序的顺序序列化

    56620发布于 2018-08-24
  • 来自专栏dotNET编程大全

    【C# XML 序列化】开篇

    (2)索引器、私有字段或只读属性(只读集合属性除外)不能被序列化;若要序列化对象的所有公共和私有字段和属性,请使用 DataContractSerializer 而不要使用 XML 序列化。 DataContractSerializer 与 XMLSerializer的区别 特性 XMLSerializer DataContractSerializer 默认Mapping 所有Public DataMember或者Serializable 成员的默认次序 Type中定义的顺序 字母排序 兼容性 .asmx Remoting Deserialzation过程中 调用默认构造函数 不会调用 DataContractSerializer DataContractSerializer 可以序列化实现 Idictionary 的类型,而 XML 序列化器不能。 DataContractSerializer 序列化所有标记为 [DataMember] 属性的成员,即使成员标记为私有。

    1.6K31编辑于 2023-12-15
  • 来自专栏技术小讲堂

    WCF中数据契约之已知类型的几种公开方式代码中定义配置中定义宿主端使用解析器

    <system.runtime.serialization>     <dataContractSerializer>       <declaredTypes>         <add type=" ,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"/>         </add>       </declaredTypes>     </dataContractSerializer

    1.1K30发布于 2018-03-07
领券