.net的XML对象序列化VS WCF中xml序列化问题
整理一下 .net 对象序列化注意事项:
1. 字段:必须是 public类型
2.属性:只读或者只写的属性不被序列化,只有 可读可写并且赋值的才可以
序列化:
Someclass obj = new SomeClass();
XmlSerializer ser = new XmlSerializer(typeof(Someclass));
StreamWriter writer = new StreamWriter("ser.xml");
ser.Serialize(writer, obj);
writer.Close();
反序列化
FileStream fs = new FileStream("ser.xml", FileMode.Open);
Someclass newObj = (Someclass)ser.Deserialize(fs);
fs.Close();
对于数组亦可,只需将SomeClass换成SomeClass[]即可。
关于在WCF中的序列化
json:DataContractJsonSerializer支持使用以JavaScript 对象标记作为序列化格式
using System.Runtime.Serialization.Json;
Employee e = new Employee(, "Daniel", "Dong");
FileStream writer = new FileStream("sample.xml", FileMode.Create);
DataContractJsonSerilizer ser = new DataContractJsonSerilizer(typeof(Employee));
ser.Serialize(writer, e);
writer.Close();
序列化Employee类的结果
{"Employee":101, "FirstName":"Daniel", "LastName":"Dong"}
xml: 主要讲两种
DataContractSerializer(作为默认的序列化基础方法因为它是WCF的初始序列化结构)、
XmlSerializer(如果你需要支持已有的类型或者自定义序列化而且它们不被DataContractSerializer支持的话,你可能想要使用XmlSerializer.)
Demo: xmlSerializer
using System.Xml.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Diagnostics; namespace Chinaer.WcfDemo.ConsoleClient
{
class Program
{
static void Main(string[] args)
{ Person person = new Person()
{
Age = ,
UserPwd = "",
UserName = "郭志奇",
Date = DateTime.Now
}; using (XmlWriter writer = new XmlTextWriter("person.xml", Encoding.UTF8))
{
XmlSerializer serializer = new XmlSerializer(typeof(Person));
serializer.Serialize(writer, person);
} Process.Start("person.xml");
Console.Read();
} /// <summary>
/// 序列化方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="instace"></param>
/// <param name="fileName"></param>
public static void Serialize<T>(T instace, string fileName)
{
using (XmlWriter writer = new XmlTextWriter(fileName, Encoding.UTF8))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
serializer.Serialize(writer, instace);
}
Process.Start(fileName);
}
}
[XmlRoot(ElementName="guozhiqi",Namespace="http://www.guozhiqi.com")]
/// <summary>
/// 定义一个实体类 Person
/// </summary>
public class Person
{
private Guid _id; private DateTime _date;
//注意我们没有默认的构造函数
internal double Age { get; set; } //私有字段 年龄
/// <summary>
/// 通过XmlAttributeAttribute 序列化成xml属性
/// </summary>
[XmlAttribute(AttributeName="GuidID",Namespace="http://guidID")]
public Guid ID
{
get { return _id; }
set
{
_id = value;
}
} //公有的随机数
[XmlElement(ElementName="DateTime",Namespace="http://date")]
public DateTime Date
{
set
{
_date = value;
}
get
{
return _date;
}
} public string UserName { get; set; } public string UserPwd { get; set; }
public Person() { }
public Person(double age, Guid id)
{
this.Age = age; }
} }
序列化结果:
<?xml version="1.0" encoding="utf-8"?> <guozhiqi xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" d1p1:GuidID="00000000-0000-0000-0000-000000000000"
xmlns:d1p1="http://guidID" xmlns="http://www.guozhiqi.com">
<DateTime xmlns="http://date">--21T23::13.8584896+:</DateTime>
<UserName>郭志奇</UserName><UserPwd></UserPwd></guozhiqi>
注意:xmlSerializer,对字段、属性序列化 遵循.net 序列化规则,字段是public,属性是可读可写,并且我们还也可以指定名称及命名空间
参考:
tks:
http://blog.sina.com.cn/s/blog_6f6769b50100z32v.html
http://www.cnblogs.com/jiagoushi/archive/2013/03/21/2974523.html
http://www.cnblogs.com/danielWise/archive/2010/12/17/1909537.html
.net的XML对象序列化VS WCF中xml序列化问题的更多相关文章
- XML配置silverlight ,wcf 解析xml
XML 代码: <?xml version="1.0" encoding="utf-8" ?><ChartSet xmlns:xsi=&qu ...
- WCF中因序列化问题引起的异常和错误。
尝试对参数 http://tempuri.org/ 进行序列化时出错: parameters.InnerException 消息是“不应为数据协定名称为“DBNull:http://schemas.d ...
- paip.获取proxool的配置 xml读取通过jdk xml 初始化c3c0在代码中总结
paip.获取proxool的配置 xml读取通过jdk xml 初始化c3c0在代码中 xml读取通过jdk xml 初始化c3c0在代码中.. ... 作者Attilax 艾龙, EMAI ...
- SQL SERVER中XML查询:FOR XML指定PATH
SQL SERVER中XML查询:FOR XML指定PATH 前言 在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指 ...
- php中xml元素取值问题
<?php $_xml = <<<_xml <?xml version="1.0" encoding="utf-8"?> & ...
- [.net 面向对象程序设计进阶] (9) 序列化(Serialization) (一) 二进制流序列化
[.net 面向对象程序设计进阶] (9) 序列化(Serialization) (一) 二进制流序列化 本节导读: 在.NET编程中,经常面向对象处理完以后要转换成另一种格式传输或存储,这种将对 ...
- WCF中序列化(XML\JSON\Dt)
序列化 是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象. 序列化描述了持久化 ...
- C#中XML与对象之间的序列化、反序列化
直接上代码: using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serializ ...
- .NET中XML序列化的总结
[题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...
随机推荐
- iOS : 用 InterfaceBuilder 开始一个项目
1.创建一个 xib 文件 : Main_iPhone.xib 更改 File's Owner 的 Class 为 UIApplication; 添加 1 个 Window .1 个 Object . ...
- 转 linux 权限
发布系统架构图简化如下: 管理员通过Jenkins调用“发布程序(代号varian,以下简称varian)”,发布程序会进行一系列的初始化操作,完成后生成Docker镜像上传到Docker仓库,容器集 ...
- 按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格
首先来建立一个新的Excel文档,在桌面上点击右键,选择[新建]-[Excel工作表],命名为[新手学员]. 现在这个新Excel文档是空白的,我们接下来会通过按键精灵的脚本来打开并写入一些数据.打开 ...
- font-awesome 使用方法
需要引入文件 font-awesome.css <link rel="stylesheet" href="{$yf_theme_path}public/font-a ...
- sar监控工具详解
转自http://www.cnblogs.com/Amaranthus/p/3745680.html SAR NAME: SAR报告,收集,保存系统活动信息 语法: sar [ -A ] [ -b ...
- 和我一起学《HTTP权威指南》——Web服务器
Web服务器 Web服务器会做些什么 1.建立连接(接受或关闭一个客户端连接) 2.接收请求(读取HTTP报文) 3.处理请求(解释请求报文并采取行动) 4.访问资源 5.构建响应(创建带有正确首部的 ...
- android EditText设置弹出数字输入法键盘
<EditText android:id="@+id/edit_digit_input" android:layout_width="wrap_ ...
- extJS 中 ext.data 介绍
ext.data 最主要的功能是获取和组织数据结构,并和特定控件联系起来,于是,Ext.data成了数据的来源,负责显示数据. Ext.data在命名空间中定义了一系列store.reader和pro ...
- PHP基本连接数据库
最简单的代码 connect.php <?php $host="localhost"; $db_user="root"; $db_pass="& ...
- 2、一、Introduction(入门):1、Application Fundamentals(应用程序基础)
一.Introduction(入门) 1.Application Fundamentals(应用程序基础) Android apps are written in the Java programmi ...