.NET中可否存储与类型无关的数据?

天堂里的死神 天堂里的死神 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
比较小白的问题,小生C++学出来的,C#不是太熟悉,序列化这里有些疑惑。
:P
正在做一个序列化相关的模块,可能会面临几种状况:

1 主要用于序列化struct和value类型,但包括struct数组和value数组、List、KeyValuePair等的存档需求。
C++中,因为这些类型的内存布局是可知的,无论是不是数组,存盘只要取一个首地址ptr,一个长度length,就可以用下面的方式:save(ptr, length)。C#的Stream虽然可以写到byte[]里,但是怎么从struct、Value类型以及它们的数组、list、KeyValuePair中取到这个byte[]呢?
最好是用引用的方式获取(就是将一个struct等等强制转换为一个byte[])。


2 可能会序列化第三方的.NET Assembly中的类(主要会是struct),这些类可能没有[Serializable] Attribute。
因此不能使用binary Formatter,而且binary formatter一直没认真看下去Reflector,感觉里面绕的太多,不知道会不会有性能损失。
这种情况下,如果能实现1的方法,则我就不用再去做什么TypeDescriptor了,引入那个概念可能会让程序变得很难懂,而且让用户可以接管的东西太多,怕后面导致难以维护。


3 可能会处理下面的情况:在Assembly 1 中,一个Namespace1.Class1被存入文件,而用户后来会升级到Assembly2,这时候同一个Class,内存布局没有任何变更的情况下,Namespace可能变了,变成了Namespace2.Class1,这时候如何去处理。
我在存这个Class1的时候,肯定是存了它的名字的,但是我发现用名字的话,无论哪种方法都是无法保证读的时候能定位到正确的Class1的:
如果存全名,那这里肯定读不出来了,上面说的那个NS1转到NS2就没戏。
如果仅存Assembly名+Class名,那么Assembly里如果有同名Class也没戏(同名不同namespace)。
不知道怎样能我怎么存进去的Class,读出来的时候也能够唯一正确地定位到这个Class——无论Assembly怎么样换。(这里面有个假设:Class的本名是绝对不变的)

谢谢大家。
...全文

相关推荐

Oracle与.Net 数据类型映射

在.NET开发中,Oracle数据库是常用的后端存储系统之一,特别是在企业级应用中。了解Oracle数据库与.NET数据类型的映射关系对于开发人员来说至关重要,这直接影响到数据的正确存储、检索和处理。

gaofeiyun

51、.NET 中的数据存储与网络编程相关类型解析

本文详细解析了 .NET 中与数据存储和网络编程相关的核心类型。在隔离存储部分,介绍了 IsolatedStorageException、IsolatedStorageFile、IsolatedStorageFileStream 和 IsolatedStorageScope 等类型,帮助开发者实现安全的隔离式数据存储。在网络编程部分,涵盖了 System.Net 命名空间中的常用类型,如 WebClient、WebRequest、WebResponse、CookieContainer、Authenticat

time3

深入理解SQL Server与.NET中的数据类型处理

本文深入探讨了在SQL Server和.NET框架中数据类型的处理方法。首先介绍了如何使用二进制格式存储和检索标志位,然后比较了在数据库中存储标志位的INT类型与BINARY类型的优缺点。文章还涉及了SQL Server中标准数据类型(如BIT、TIMESTAMP、SQL_VARIANT、UNIQUEIDENTIFIER和XML)的使用场景和限制。最后,探讨了.NET中的SqlTypes命名空间及其与.NET原始类型在数据处理上的差异,并提出了一些替代方案。

水坑儿

利用NHibernate开发与数据库无关的系统

### 利用NHibernate开发与数据库无关的系统#### 摘要本文探讨了如何使用NHibernate这一.NET平台上的对象持久化工具来构建与数据库无关的应用系统。

batpig

如何使用UDLA框架执行与数据库无关的数据绑定

**创建数据库连接**:使用UDLA,你可以通过创建一个`DbConnection`对象来建立与数据库的连接,而不需要直接指定数据库类型。UDLA会根据配置信息自动选择合适的数据库驱动。2.

weixin_38631182
评论 12
收藏 已收藏
分享
返回顶部
天堂里的死神
C# 111,128 成员 642,536 内容