持久化(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进行特殊的定义。以上
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值