.NET中可否存储与类型无关的数据?
: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数据类型的映射关系对于开发人员来说至关重要,这直接影响到数据的正确存储、检索和处理。
51、.NET 中的数据存储与网络编程相关类型解析
本文详细解析了 .NET 中与数据存储和网络编程相关的核心类型。在隔离存储部分,介绍了 IsolatedStorageException、IsolatedStorageFile、IsolatedStorageFileStream 和 IsolatedStorageScope 等类型,帮助开发者实现安全的隔离式数据存储。在网络编程部分,涵盖了 System.Net 命名空间中的常用类型,如 WebClient、WebRequest、WebResponse、CookieContainer、Authenticat
深入理解SQL Server与.NET中的数据类型处理
本文深入探讨了在SQL Server和.NET框架中数据类型的处理方法。首先介绍了如何使用二进制格式存储和检索标志位,然后比较了在数据库中存储标志位的INT类型与BINARY类型的优缺点。文章还涉及了SQL Server中标准数据类型(如BIT、TIMESTAMP、SQL_VARIANT、UNIQUEIDENTIFIER和XML)的使用场景和限制。最后,探讨了.NET中的SqlTypes命名空间及其与.NET原始类型在数据处理上的差异,并提出了一些替代方案。
利用NHibernate开发与数据库无关的系统
### 利用NHibernate开发与数据库无关的系统#### 摘要本文探讨了如何使用NHibernate这一.NET平台上的对象持久化工具来构建与数据库无关的应用系统。
如何使用UDLA框架执行与数据库无关的数据绑定
**创建数据库连接**:使用UDLA,你可以通过创建一个`DbConnection`对象来建立与数据库的连接,而不需要直接指定数据库类型。UDLA会根据配置信息自动选择合适的数据库驱动。2.


