首页 > 代码库 > 持久化(Serialize)探索尝试
持久化(Serialize)探索尝试
设计之初就需要考虑的要点有
1.数据结构是否支持Web Service
2.是否需要支持持久化对象为XML结构,与Contract持久化并不冲突,是一种补充
3.当.net对象垮远程边界时,考虑支持runtime持久化
4.当只需要普通持久化时,避免使用XML和Runtime技术。
XML Serial
用了Dotnet那么久还几乎没用过Serial技术,惭愧。
将内存流修改为文件流,再进行下面的测试,可以得到相同的结果。
类可以更复杂,特殊的情况需要添加特定的Attribute进行特殊的定义。以上
1.数据结构是否支持Web Service
2.是否需要支持持久化对象为XML结构,与Contract持久化并不冲突,是一种补充
3.当.net对象垮远程边界时,考虑支持runtime持久化
4.当只需要普通持久化时,避免使用XML和Runtime技术。
XML Serial
用了Dotnet那么久还几乎没用过Serial技术,惭愧。
open System open System.IO [<CLIMutable>]//这里必须添加此特性,让这个Recode带有一个默认的构造函数 type DateSerTest = { Local:DateTime; Utc:DateTime } let ser = new System.Xml.Serialization.XmlSerializer(typeof<DateSerTest>) let d = { Local = DateTime.SpecifyKind(new DateTime(2014, 10, 1), DateTimeKind.Local) Utc = DateTime.SpecifyKind(new DateTime(2014, 10, 1), DateTimeKind.Utc) } let testSerialization(dt:DateSerTest) = use ms = new IO.MemoryStream() ser.Serialize(ms, o = dt) let result = Text.Encoding.Default.GetString(ms.GetBuffer()) ms.Close() result let objecblock = testSerialization d//从内存流中取得Xml字节流,流是数据是媒介,Serializer是模板。 let ms = new IO.MemoryStream(Text.Encoding.Unicode.GetBytes(objecblock)) let newd = ser.Deserialize(ms) :?> DateSerTest//生成对象 if d = newd then prrintfn "Equal"
将内存流修改为文件流,再进行下面的测试,可以得到相同的结果。
let testFileSerialization(dt:DateSerTest) = let filename = "serialization.xml" use ms = new StreamWriter(filename) ser.Serialize(ms, o = dt) ms.Close() testFileSerialization d let ms = new StreamReader("serialization.xml") let newd = ser.Deserialize(ms) :?> DateSerTest if d = newd then printfn "Equal"
类可以更复杂,特殊的情况需要添加特定的Attribute进行特殊的定义。以上
持久化(Serialize)探索尝试
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。