博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net的XML对象序列化VS WCF中xml序列化问题
阅读量:6819 次
发布时间:2019-06-26

本文共 3750 字,大约阅读时间需要 12 分钟。

整理一下 .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(101, "Daniel", "Dong");            FileStream writer = new FileStream("sample.xml", FileMode.Create);            DataContractJsonSerilizer ser = new DataContractJsonSerilizer(typeof(Employee));            ser.Serialize(writer, e);            writer.Close();
View Code

 

序列化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 = 12,                 UserPwd = "21",                 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();         }          ///          /// 序列化方法         ///          /// 
/// /// public static void Serialize
(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")] ///
/// 定义一个实体类 Person /// public class Person { private Guid _id; private DateTime _date; //注意我们没有默认的构造函数 internal double Age { get; set; } //私有字段 年龄 ///
/// 通过XmlAttributeAttribute 序列化成xml属性 /// [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; } } }
View Code

 

序列化结果:

2013-03-21T23:31:13.8584896+08:00
郭志奇
21
View Code

 

 

注意:xmlSerializer,对字段、属性序列化 遵循.net 序列化规则,字段是public,属性是可读可写,并且我们还也可以指定名称及命名空间

参考:

tks:

转载地址:http://fuszl.baihongyu.com/

你可能感兴趣的文章
getHibernateTemplate()
查看>>
【SPOJ】10628. Count on a tree(lca+主席树+dfs序)
查看>>
Uva10290 - {Sum+=i++} to Reach N
查看>>
本地域名解析
查看>>
读javascript高级程序设计15-Ajax,CORS,JSONP,Img Ping
查看>>
C# 中的 ConfigurationManager类引用方法
查看>>
搜索引擎-处理查询
查看>>
unzip 命令使用
查看>>
ggplot ggplot2 画图
查看>>
管理http服务的脚本
查看>>
页面导航
查看>>
特征选择方法之信息增益
查看>>
Aix 光盘软件包安装
查看>>
算法:街区最短路径问题
查看>>
Linux下Samba的配置
查看>>
如何取消IE“已限制此网页运行可以访问计算机的脚本或ActiveX控件”
查看>>
Android 所遇问题(一)
查看>>
2014年移动媒体趋势报告:中国网络媒体的未来
查看>>
设计模式(15)-Facade Pattern
查看>>
centos 安装lamp
查看>>