一、层次结构

基类:XmlObjectSerializer

派生类:

  • DataContractSerializer
  • NetDataContractSerializer
  • DataContractJsonSerializer

需要引入的程序集:

  • System.Runtime.Serialization.dll
  • System.Runtime.Serialization.Primitives.dll

二、实体类

[DataContract(Name = "order", Namespace = "http://a/order")]
//[KnownType(typeof(order))]
public class Order
{
    public Order(Guid id, Product product)
    {
        this.OrderID = id;
        this.Product = product;
    }

    [DataMember(Name = )]
    public Guid OrderID { set; get; }

    [DataMember]
    public Product Product { set; get; }

}

[DataContract(Name = "product", Namespace = "http://a/product")] //IsRequired=false,EmitDefaultValue=false
public class Product
{
    public Product(Guid id, string productArea)
    {
        this.ProductID = id;
        this.productArea = productArea;
    }

    [DataMember(Name = )]
    public Guid ProductID { set; get; }

    [DataMember]
    private string productArea { set; get; } //私有属性也可以序列化。
}

二、序列化与反序列化

Product product = new Product(Guid.NewGuid(), "XiaMen");
Order order = new Order(Guid.NewGuid(), product);
string filename = @"C:\s.xml";
using (FileStream fs = new FileStream(filename, FileMode.Create))
{
    DataContractSerializer serializer = new DataContractSerializer(typeof(Order));
    using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs))
    {
        serializer.WriteObject(writer, order);
    }
}
Process.Start(filename);

using (FileStream fs = new FileStream(filename, FileMode.Open))
{
    DataContractSerializer serializer = new DataContractSerializer(typeof(Order));
    using (XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas()))
    {
        order = serializer.ReadObject(reader) as Order;
    }
}

三、得到的XML内容

<?xml version="1.0" encoding="utf-8"?>

<order xmlns="http://a/order" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Product xmlns:a="http://a/product">
    <a:productArea>XiaMen</a:productArea>
    <a:id>d3b4c977-d052-4fd4-8f59-272e56d875a8</a:id>
  </Product>
  <id>96d0bb44-cee4-41b6-ae20-5d801c1b3dc9</id>
</order>

六、用DataContractSerialize类序列化XML的更多相关文章

  1. 利用JAXB实现java实体类和xml互相转换

    1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...

  2. 类的XML序列化(XML Serialization)

    最近做的一个ASP.NET项目中,需要在一个页面中维护一个类的数组,在每次页面刷新的使其前一次的状态保持不变.开始错误的使用了static,导致了致命的共享错误.后来突然想起C#类能够使用XML序列化 ...

  3. Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

    酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...

  4. 使用C#实现实体类和XML相互转换

    一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...

  5. 简单Java类与XML之间的转换

    需要的jar包:xmlpull_1_0_5.jar,xstream-1.4.1.jar) 1.工具类XstreamUtil package com.learn.util; import com.tho ...

  6. JAXB2序列化XML

    Jaxb2 实现JavaBean与xml互转 http://zhuchengzzcc.iteye.com/blog/1838702 JAXBContext类,是应用的入口,用于管理XML/Java绑定 ...

  7. WCF中序列化(XML\JSON\Dt)

    序列化 是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象. 序列化描述了持久化 ...

  8. VC解析XML--使用CMarkup类解析XML

    经过今天尝试MFC解析XML串,也算有了不少收获,总结一下.         我是使用的CMarkup类对XML进行操作.                  CMarkup好象都是先从一个xml文件里 ...

  9. C# 实体类序列化与反序列化一 (XmlSerializer)

    /// <summary> /// 实体类序列化的反序列化的类 /// </summary> /// <typeparam name="T">& ...

随机推荐

  1. mysql查看和设置最大连接数

    .查看最大连接数 SHOW VARIABLES LIKE '%max_connections%'; .修改最大连接数 ;

  2. go方法

    go中的方法(method),跟函数(function)不是一个概念,一定要区分,它的概念与python中的类方法类似. go中是没有类的概念的,所以,go要想实现类 多种属性集合的功能的话,必须要使 ...

  3. [转帖]Epoll和IOCP的比较

    Epoll和IOCP的比较 https://yq.aliyun.com/articles/53621/   kryptosx 2016-05-27 23:32:51 浏览6181   原来整理过一个& ...

  4. 2019最新黑链代码expression:隐藏链接代码

    之前有收集了一些主流的隐藏链接代码,最近又发现一种相当牛X的代码,如下: 源代码: <div style="position:absolute;left:expression(1-90 ...

  5. nginx与PHP编译configure

    configure参数nginx和php是编译安装的关键.记录下来备用: php: ./configure --prefix=/usr/local/php --with-config-file-pat ...

  6. 使用应用编排服务一键式部署,持续集成利器--jenkins

    这篇文章主要是来聊一聊jenkins,可说道jenkins,我没有办法不把它与持续集成(Continuous integration,简称CI)联系到一起,所以我先来谈谈什么是持续集成以及为什么需要持 ...

  7. vue实现简单的点击切换颜色

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 偷窥篇:重要的C#语言特性——30分钟LINQ教程

    本文转自:http://www.cnblogs.com/liulun/archive/2013/02/26/2909985.html 千万别被这个页面的滚动条吓到!!! 我相信你一定能在30分钟之内看 ...

  9. NetCore.SignalR.Demo演示

    项目github,点击https://github.com/wangpengzong/NetCore.SignalR.Demo 1.打开服务端Server(\SignalR.Server\bin\De ...

  10. iOS - 处理通话或录音状态中界面错乱的重布局

    iphone设备在通话或录音状态中,状态栏下移了20个像素,这时controller的view的frame的高度就减少了20个像素,所以我们需要根据view的frame去布局子view.但是是,当状态 ...