我正在用C#编写一个项目 我想在二进制文件中保存一个类,然后在C中读取该文件 我想知道如何在不序列化和反序列化的情况下完成它 请帮帮我
答案 0 :(得分:7)
您正在谈论跨平台序列化。
一些选择:
但无论你做什么,都不要使用BinaryFormatter
。我强调这一点的原因是,如果您搜索C#二进制序列化,它可能是您首先看到的,但完全不适合您的目的。该格式是专有的,包括仅从.NET有意义的类型信息(实际上不是来自非托管C)。
我非常依赖“协议缓冲区”作为序列化API,并且有both C# and C versions here。
答案 1 :(得分:4)
将对象的状态保存到文件意味着将其序列化。
从文件中读取对象的状态意味着反序列化它。
您 使用序列化/反序列化来执行您想要的操作。
由于您需要跨不同语言执行此操作,因此使用内置序列化程序可能不会非常有用。
您可以为C#部分使用其中一个XML序列化程序,但之后必须在c中解析XML。
另一个选择是编写自己的自定义serizlizer来执行此操作。这样您就可以完全控制文件格式。
答案 2 :(得分:0)
我认为你的意思是你想让一个C#应用程序写一个文件。然后有一个单独的C / C ++应用程序读取该文件?基于这个假设,在C#中,您需要查看System.IO命名空间,特别是FileStream类。
另外,我建议编写一个C#类库项目,通过.NET序列化类处理这个读/写,然后从C#代码中调用它,并使用COM([assembly: ComVisible(true)]
)从C / C ++代码访问.NET代码。
答案 3 :(得分:0)
你想保存课程吗?这是不可能的,因为类被编译成.net。
中的程序集(exe,dll)我认为你想要的是将object
或更适合的状态struct
保存到文件中。
您可以使用BinaryWriter
类将该类的所有字段写入文件。您也可以have a look at this。