写点什么

序列化 .NET 中的不可变集合

  • 2013-11-12
  • 本文字数:813 字

    阅读完需:约 3 分钟

.NET 不可变集合的序列化问题现在非常糟糕。如果你使用 DataMember 属性标记一个 ImmutableList类型的属性,那么标准的反序列化器好像会忽略它。没有运行时错误,但是数据就是不存在。

你可以将属性改为 IList 类型从而防止数据丢失,但是这会导致一个语义问题。尽管你可以将一个不可变列表存储到一个 IList 中,但是这种做法令人难以接受,因为大多数人心里面都认为一个给定的 IList 不会是只读的。另外,类型检查器不能在编译时捕获这种错误。

为了解决语义错误,用户认为可以提供一个 IReadOnlyList 类型的属性替代。不幸的是,这样做会在序列化期间抛出一个异常,除非添加了 KnownType 属性。但是一旦添加了该属性在对其序列化时就又会产生无声的错误。

同样地,传统的序列化机制(使用 Serializable 属性)也不支持。Immo Landwerth 写道:

是的。首先,我们使用的可移植子集(portable subset)不支持二进制序列化( visualstudio.uservoice.com/…/3701316-make-the-new-immutable-collection-types-serializab )。其次,我们喜欢一个能够在核心数据结构之外实现序列化的模型,因为这样在客户端 / 服务器场景下使用的时候就可以更加有弹性地实现变化、解决跨版本序列化问题。流行的序列化类库已经计划为不可变集合增加支持,例如 JSON.NET、protobuf-net。

这样我们可以选择第三方类库,例如 JSON.NET。截至版本 5.0r7, JSON.NET 已经支持.NET 官方的不可变集合类库。该版本中的新内容还包括 JsonExtensionData,它会将一个被反序列化类中的所有没有属性表示的附加数据存储起来。

Marc Gravell 还宣称 protobuf-net 将会支持不可变集合

protobuf-net (r666)的主干现在已经支持不可变列表(List)、数组(Array)、字典(Dictionary)、哈希集合(Hash-Set)、排序集合(Sorted-Set)、排序字典(Sorted-Dictionary),同时它们的所有接口都有双份。但是所有内容都在一个单例模式识别块中。

查看英文原文 Serializing Immutable Collections in .NET

2013-11-12 05:121552
用户头像

发布了 321 篇内容, 共 132.1 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

pytest 参数化测试用例

测吧(北京)科技有限公司

测试

【中英互译】可以为你出谋划策的AI翻译

AppBuilder

做了2年前端,盘点前端技术栈!大佬轻喷~

伤感汤姆布利柏

SD-WAN企业组网六大优点

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

活动回顾丨飞天技术沙龙 Serverless + AI 专场(上海站)回顾 & PPT 下载

阿里巴巴云原生

阿里云 Serverless 云原生

使用Postman发送POST请求的指南

霍格沃兹测试开发学社

AI “黏土画风”轻松拿捏,手把手带你云端部署 ComfyUI

阿里巴巴云原生

阿里云 云原生

VSCode安装使用教程,保姆级!

霍格沃兹测试开发学社

预告|博睿数据将受邀出席GOPS全球运维大会北京站!

博睿数据

掌握JMeter:深入解析如何提取和利用JSON数据

霍格沃兹测试开发学社

无缝融合:使用 Python 和 PyFFmpeg 合并视频的完整指南

霍格沃兹测试开发学社

天谋科技与慢牛科技完成兼容性互认证

Apache IoTDB

企业上云的优点、难点及SD-WAN解决方案的探讨

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

开启多屏时代,让设备不再吃灰!ToDesk、Spacedesk、EV、Duet Display扩展屏实测报告

小喵子

ToDesk 多屏 扩展屏

基于云效 AppStack,5 分钟搞定一个 AI 应用的开发和部署

阿里云云效

阿里云 云原生 云效

深入探索Chrome开发者工具:开发者的利器

霍格沃兹测试开发学社

Windows电脑安装Apache JMeter的详细教程

霍格沃兹测试开发学社

视频生成模型 Dream Machine 开放试用;微软将停止 Copilot GPTs丨 RTE 开发者日报 Vol.224

声网

基于云效 AppStack,5 分钟搞定一个 AI 应用的开发和部署

阿里巴巴云原生

阿里云 云原生 云效

音频剪裁大师:使用 Python 和 ffmpeg 分割音频的完整指南

霍格沃兹测试开发学社

inBuilder 低代码平台新特性推荐 - 第二十一期

inBuilder低代码平台

开源 低代码

【IoTDB 线上小课 04】时序数据库怎么选?揭秘性能核心指标!

Apache IoTDB

ICE.AI市场需求与愿景

科技热闻

逐“路”向前!路桥股份携手端点科技重塑数字化采购新格局

科技热闻

深入理解 pytest 测试框架

测吧(北京)科技有限公司

测试

Postman变量使用指南

霍格沃兹测试开发学社

一杯咖啡的艺术 | 如何利用数字孪生技术做出更美味的意式浓缩咖啡?

Altair RapidMiner

人工智能 数据分析 数字孪生 altair

数栈xAI:轻量化、专业化、模块化,四大功能革新 SQL 开发体验

袋鼠云数栈

大数据 AI 大模型 大数据模型 数据大模型

干货下载 |《数据治理:数据中台建设与能力提升策略》

博睿数据

序列化 .NET中的不可变集合_.NET_Jonathan Allen_InfoQ精选文章