持久化(Serialize)探索尝试

设计之初就需要考虑的要点有

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进行特殊的定义。以上

时间: 2024-08-09 16:48:57

持久化(Serialize)探索尝试的相关文章

Struts2技术内幕 读书笔记二 web开发的基本模式

最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的:例如我们写自己的servlet的时候就得继承javax.servlet.http.HttpServlet接口. 在标准之上的是对不同标准的具体实现.例如同是servlet标准,tomcat有一套实现方式,Websphere又有不同的实现方式. 在程序员级别来说,面对复杂的业务流程,不同的程序员会有

Web前端开发十日谈

一直想写这篇“十日谈”,聊聊我对Web前端开发的体会,顺便解答下周围不少人的困惑和迷惘.我不打算聊太多技术,我想,通过技术的历练,得到的反思应当更重要. 我一直认为自己是“初级”前端开发工程师,一方面我入道尚浅,只有短短几年,另一方面我自知对技术的钻研并不深入,可能是由于环境的原因,当然最重要的是,我幸运的参与到互联网崛起的浪潮之巅.时势造就了一批技能薄弱但备受追捧的“弄潮者”,这在很大程度上影响我们对“技术本质”的洞察力,多年来也一直未有成体系的“前端技术”布道佳作,以至于当下多数人对前端技术

O2O是机遇不是鸡肋,百度O2O的步伐不会停

俗语讲,好事不出门,坏事传千里,而在互联网时代,千里内外也就是即刻之间.互联网时代有一种恶叫危言耸听,有一种哀叫不求甚解,尤其在企业公关层面一恶一哀的相互影响往往都能产生可怕的杀伤力,包括BAT在内也都曾深受其害.例如关于百度放弃O2O这件事,凡是对行业有一定认知或者主动查明传闻起因的都知道这是不可能的事情. O2O是百度的机遇,虽暗箭难防,但不会退缩 对于百度放弃O2O的传闻,这绝对是一个行业热点,但所有正规主流媒体均未跟进这一消息,为何?不是因为谣言止于智者,而是只要对行业有一点了解就都知道

由一把钥匙开启的未来车生活,腾讯Qne-key绝对不是玩笑

在特斯拉的带动下,互联网汽车正在加速进入消费市场,百度斥巨资研发无人驾驶汽车,计划三年商用五年量产,阿里与上汽合作的"荣威超级互联网SUV"即将在北京车展亮相,腾讯在今日推出了一款名为"Qne-key"的智能汽车终端概念产品,互联网汽车离我们的生活越来越近. 腾讯在愚人节放出的神秘"Qne-key"究竟是什么鬼?  今天中午特斯拉在美国又发布一款新车,而在中国腾讯发布了一段极具未来感的汽车视频,来介绍一款车载智能终端产品"Qne-key

淘宝前端工程师:国内WEB前端开发十日谈

转自:http://www.jianshu.com/p/8cf2df3fdbf2 一直想写这篇“十日谈”,聊聊我对Web前端开发的体会,顺便解答下周围不少人的困惑和迷惘.我不打算聊太多技术,我想,通过技术的历练,得到的反思应当更重要. 我一直认为自己是“初级”前端开发工程师,一方面我入道尚浅,只有短短几年,另一方面我自知对技术的钻研并不深入,可能是由于环境的原因,当然最重要的是,我幸运的参与到互联网崛起的浪潮之巅.时势造就了一批技能薄弱但备受追捧的“弄潮者”,这在很大程度上影响我们对“技术本质”

我的Windows Phone 8

学习Windows Phone 8开发,将自己收集到的学习资料做一个汇总(不断更新). 我的Windows Phone应用 DotaMax MyAppToStart 麦子学院 WP8.1版(UI简陋) WP7学习博客 整理Windows Phone 7 教程1.0 超过500篇文章   作者:机微网 WP7 开发31日谈 WP8学习视频 传智播客 .NET视频 主要初学: C#编程基础 C#面向对象基础 WPF教程 WP7移动开发 WP8.1移动开发 麦子学院(免费观看,需要注册账号)  作者:

如何拯救被“堵偏门”的校园贷?

近日,国有大行试水校园贷的消息持续发酵,校园贷市场在经历了从探索尝试.到达顶峰到乱象丛生.政策规范前后将近4年的时间,终于迎来了正规军的入驻.在"正门开,偏门堵"的政策趋势下,校园贷平台进入一波退潮期,不仅裸贷等非法放贷群体销声匿迹,专为校园贷服务的分期购和P2P等小额现金贷平台都受到不同程度的冲击,大部分校园贷平台面临着整改和退出的命运. 然而,事物的兴衰更替必然遵循一定的规律,校园贷从零到一,从乱象到规范,期间的诸多问题也是另一个商机滋长冒头的征兆.校园贷之所以走到今天如此困窘的一

2017第26周六 知与行

早上有点纠结到底写什么东西,然后做下去的意义又是什么,不要只是因为惯性,否则就会成为惯性的奴隶.工作时间越长越感觉到持续积累的重要性,并从不同纬度去探索尝试,虽然到现在还没成功,但至少我还没有放弃. 有些道理大家都懂,但真正去践行并且有结果的人真的很好.纸上得来终觉浅,绝知此事要躬行.为什么现实却很少人去执行呢? 首先没做到肯定不能算是真的知道,工作上领导安排的任务,生活中长辈告知的道理,书中讲述的有意义的观点,一开始的某些方面我们是认可或跟我们已知的一些东西是有关联的,我们就以为自己知道了,但

《养育的选择》读书笔记

作者陈忻,美国康涅狄格大学发展心理学博士,有着十多年心理学专业功底,还是两个孩子的妈妈,既有科学基础,又有实践经验.同时,作者在美国定居,多年来对美国幼儿园和小学的教育有着长期的观察,既懂西方的教育理念,又了解中国家长的教育习惯. 本书耗费作者5年时间,从上百万家长咨询中精选了13个最普遍的养育问题,涉及孩子的安全感.社交能力.创造力.自控力的培养.她把众多经典育儿案例和美国最新儿童心理学研究成果相结合,总结出一套科学教养观,纠正了在育儿中家长们普遍搞不明白的问题,让父母能够理性.从容培养一个身