好的。我知道如何使用序列化等,但因为它只适用于已标记为序列化属性的对象 - 我如何加载数据并在不使用序列化的情况下在应用程序中使用它?说一个数据文件。加载/保存数据的替代方法 - 无需序列化?
或者,创建一个带有序列化的datacontainer,用于存放未序列化的文件。
我使用的方法是二进制序列化和XML序列化。任何其他方式,可以加载未知的数据,也许以某种方式在C#中使用它?
好的。我知道如何使用序列化等,但因为它只适用于已标记为序列化属性的对象 - 我如何加载数据并在不使用序列化的情况下在应用程序中使用它?说一个数据文件。加载/保存数据的替代方法 - 无需序列化?
或者,创建一个带有序列化的datacontainer,用于存放未序列化的文件。
我使用的方法是二进制序列化和XML序列化。任何其他方式,可以加载未知的数据,也许以某种方式在C#中使用它?
JSON序列化使用JSON.NET
这吃一切!包括匿名类型。
编辑
我知道你说“你不想要的序列化”,而是根据你的陈述“[...]这是标有序列化属性对象”,我相信你没有尝试使用JSON.NET进行JSON序列化!
那么,老式的方式是使用流访问操作并读出你想要的数据。这样你可以读/写几乎任何文件。 序列化只是根据某个合同自动执行此过程。
根据你的评论,我猜你的要求是阅读任何类型的文件,而没有在第一个合同。假设你有一个原始文件,其中第一个字节指定了字符串的长度,下一个字节代表了字符串;
例如,5 | H | e | l | l | o
var stream = File.Open(filename);
var length = stream.ReadByte();
byte[] b = new byte[length];
stream.Read(b, 0, length);
var string = Encoding.ASCII.GetString(b);
二进制I/O是为原料,因为它得到。 Check MSDN for more.
也许术语的定义是有序的;序列化是“将数据结构或对象状态转换为可在相同或其他计算机环境中稍后存储和”复活“的格式的过程。”几乎任何将“易失性”内存转换为持久性数据的方法,后退都是“序列化”,所以即使您将自己的方案转换为“序列化”,也是如此。
这就是说,它听起来像你根本不想使用.NET二进制序列化。这实际上是正确的想法;二进制序列化很简单,但非常依赖于代码和环境。将一个可序列化的类移动到不同的名称空间,或者使用Microsoft CLR序列化一个文件,然后试图在Mono中反序列化它,可能会破坏二进制序列化。
首先,您必须能够根据文件确定您应该尝试创建哪种类型的对象。你根本无法打开一些“随机”文件,并希望能够从文件中获得任何有意义的内容,而不必知道文件中的数据结构。最简单的方法是让文件通过指定它创建的对象的类型名称(您希望在您的代码库中可用)来告诉您。大多数内置序列化器都是这样做的。文件可以通知消费者其格式的其他方式包括文件,行和/或字段标题代码(在较老的标准中很常见,因为它们节省文件大小)和扩展/ MIME类型。
随着整理,反序列化可以发生。如果使用内置序列化程序对文件进行序列化,只需使用该序列化程序即可,但如果是较旧的格式(CSV,固定长度),则必须逐行将文件解析为代表行中的对象,并将其收集到代表文件的主要对象。
查看ETL(Extract-Transform-Load)过程模式。这是一个模块化的,可扩展的架构,以文件并将它们转化为数据,程序可以工作模式:
看看mongoDB – Samson 2012-07-17 15:22:20
是的,但是说我想将一些原始数据加载到应用程序中。试图序列化一个随机文件会使它寻找一个创建数据文件的类。 – Deukalion 2012-07-17 15:24:17