如何结合泛型使用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
相关产品推荐
相关产品推荐

