You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合泛型使用DataContractJsonSerializer?含序列化反序列化代码

F# 类型安全的JSON序列化与反序列化实现

嘿,我在《将对象转换为JSON以及将JSON转换为对象》里挖到了这个实用的F#代码片段,专门搞定需要传递类型场景下的对象与JSON字符串互转问题,完美覆盖序列化和反序列化需求,分享给你:

序列化:对象转JSON

这个泛型函数能把任意类型的对象转换成JSON字符串:

/// 对象转JSON
let internal json<'t> (myObj:'t) = 
    use ms = new MemoryStream()
    (new DataContractJsonSerializer(typeof<'t>)).WriteObject(ms, myObj)
    Encoding.Default.GetString(ms.ToArray())

它靠DataContractJsonSerializer处理核心序列化逻辑,用MemoryStream在内存中完成字节流转换,最后把字节数组解码成可读的JSON字符串。

反序列化:JSON转对象

对应的泛型函数可以把JSON字符串还原成指定类型的对象(补全了原代码中未完成的逻辑):

/// JSON转对象
let internal unjson<'t> (jsonString:string) : 't = 
    use ms = new MemoryStream(ASCIIEncoding.Default.GetBytes(jsonString))
    let obj = (new DataContractJsonSerializer(typeof<'t>)).ReadObject(ms) :?> 't
    obj

核心是把JSON字符串转成字节流,通过ReadObject读取流内容后,再做类型转换得到目标对象,全程保证类型安全。

内容的提问来源于stack exchange,提问作者App2015

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:58:27