整理一下 .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序列化问题的更多相关文章

  1. XML配置silverlight ,wcf 解析xml

    XML 代码: <?xml version="1.0" encoding="utf-8" ?><ChartSet  xmlns:xsi=&qu ...

  2. WCF中因序列化问题引起的异常和错误。

    尝试对参数 http://tempuri.org/ 进行序列化时出错: parameters.InnerException 消息是“不应为数据协定名称为“DBNull:http://schemas.d ...

  3. paip.获取proxool的配置 xml读取通过jdk xml 初始化c3c0在代码中总结

    paip.获取proxool的配置  xml读取通过jdk xml 初始化c3c0在代码中  xml读取通过jdk xml 初始化c3c0在代码中.. ... 作者Attilax  艾龙,  EMAI ...

  4. SQL SERVER中XML查询:FOR XML指定PATH

    SQL SERVER中XML查询:FOR XML指定PATH 前言 在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指 ...

  5. php中xml元素取值问题

    <?php $_xml = <<<_xml <?xml version="1.0" encoding="utf-8"?> & ...

  6. [.net 面向对象程序设计进阶] (9) 序列化(Serialization) (一) 二进制流序列化

    [.net 面向对象程序设计进阶]  (9)  序列化(Serialization) (一) 二进制流序列化 本节导读: 在.NET编程中,经常面向对象处理完以后要转换成另一种格式传输或存储,这种将对 ...

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

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

  8. C#中XML与对象之间的序列化、反序列化

    直接上代码: using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serializ ...

  9. .NET中XML序列化的总结

    [题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...

随机推荐

  1. js Object.prototype.toString.call()

    Object.prototype.toString.call(obj)使用方法以及原理   这几天看vue-router的源码 发现了Object.prototype.toString.call()这 ...

  2. git push 后 链接总是灰色点击没有反应

    情况描述: mymon是openfalcon的监控mysql插件,从GitHub拉下来后,改动源码后,提交到公司内部的gitlab上,发现提交上去的图标总是灰色的,点击进不去,如下图所示.怎么解决? ...

  3. [Unity3D]关于NaN(Not a Number)的问题

    在游戏运行时,代码若写得不安全很容易出现NAN的异常.一旦NAN出现整个游戏不崩溃也坏死掉了,游戏上了则是要被直接打回来的节奏,更是一个开发及测试人员每人都要扣3000块的大BUG.   一般表现为: ...

  4. Ubuntu下安装配置redis

    安装redis apt-get install redis-server 查看是否启动 ps -aux|grep redis 客户端连接 注: 安装Redis服务器,会自动地一起安装Redis命令行客 ...

  5. Oauth2.0(二):开放平台

    上一节说到Oauth2.0 的交互模型.模型涉及到三方:资源拥有者.客户端.服务提供方.其中,服务提供方包含两个角色:鉴权服务器和资源服务器.鉴权服务器负责对用户进行认证,并授权给客户端权限.认证这一 ...

  6. 关于Android打版本号的小白文

    尽管常常和android打交道.但事实上我对android不是非常了解. 这里记录一下ant编译androidproject的过程,然后顺便记录一下android的一些基本概念.不求渡人,但求渡己.这 ...

  7. Eclipse------启动Server时出现弹窗Server at localhost was unable to start within 45 seconds.

    弹窗详细信息: Server Tomcat v8. Server at localhost was unable to start within seconds. If the server requ ...

  8. Oracle批量执行SQL语句

    SQLServer的场合,用";"分割SQL语句即可正常执行. Oracle的场合,会报ORA-00911错误.Oracle中需要加上begin end才正确. Dim Sql A ...

  9. 开启apache的server-status辅助分析工具

    在Apache的调优过程中,可以通过查看Apache提供的server-status(状态报告)来验证当前所设置数值是否合理,在httpd.conf文件中做如下设置来打开: #加载mod_status ...

  10. Maven编译出现“[ERROR] java.lang.OutOfMemoryError: Java heap space”

    Windows下添加环境变量MAVEN_OPTS的value为-Xms1024m -Xmx1024m -Xss1m Linux下可修改.profile或者.bash_profile文件,并做如下设置: ...