在C+中序列化+;然后在C#中反序列化? 有一种简单的方法来将C++中的数据(XML或二进制)序列化,然后在C?

在C+中序列化+;然后在C#中反序列化? 有一种简单的方法来将C++中的数据(XML或二进制)序列化,然后在C?,c#,c++,serialization,C#,C++,Serialization,我正在使用一些不会运行.Net的远程WINNT机器。我的服务器应用程序完全是用C#编写的,所以我想要一种简单的方法来共享简单数据(主要是键值对,可能还有一些SQL结果集的表示)。我认为最好的方法是在客户机上以某种预定义的格式将数据写入xml,将xml文件传输到我的服务器,并让C#包装器将xml读入可用的C#对象 客户机和服务器通过tcp连接进行通信,我真正想要的是序列化客户机内存中的数据,通过套接字将二进制数据传输到c#内存流,我可以将其反序列化为c#对象(消除文件创建、传输等),但我认为不存在

我正在使用一些不会运行.Net的远程WINNT机器。我的服务器应用程序完全是用C#编写的,所以我想要一种简单的方法来共享简单数据(主要是键值对,可能还有一些SQL结果集的表示)。我认为最好的方法是在客户机上以某种预定义的格式将数据写入xml,将xml文件传输到我的服务器,并让C#包装器将xml读入可用的C#对象

客户机和服务器通过tcp连接进行通信,我真正想要的是序列化客户机内存中的数据,通过套接字将二进制数据传输到c#内存流,我可以将其反序列化为c#对象(消除文件创建、传输等),但我认为不存在类似的情况。请随意启发我

编辑 我知道我可以在C++应用程序中创建一个结构,并用C语言定义它,并以这种方式传递数据,但在我看来,这感觉就像我在限制可以发送的东西。我必须为对象设置预定义的大小,等等

可能对您有用

协议缓冲区是Google用于序列化结构化数据的语言中立、平台中立、可扩展的机制–想想XML,但是更小、更快、更简单。您定义了如何希望将数据结构化一次,然后可以使用特殊生成的源代码来轻松地编写和读取各种数据流和使用各种语言——java、C++或Python。
<> > .NET端口是从..p/c> C++没有结构内省(在运行时你不能找到类的字段),所以没有一般的机制来写C++对象。您要么采用约定并使用代码生成,要么(更典型地)自己编写序列化

有一些标准格式的库,如ASN.1、HDF5等,它们与实现语言无关。有一些专用库也有同样的用途(如协议缓冲区)

如果你瞄准一个特定的体系结构和编译器,那么你也可以把C++对象作为原始字节转储,并在C边创建解析器。


更好的方法取决于您希望端点的紧密耦合程度,以及数据主要是数字(HDF5)、树和序列结构(ASN.1)还是简单的普通数据对象(直接将值写入内存)

其他选项包括:

  • 创建包含所需数据的二进制文件 (不是一个简单、便携的解决方案)

  • XML

  • 亚马尔

  • 纯文本文件


    • 您可以选择很多选项。命名管道,共享 内存、DDE、远程处理。。。这取决于你的特殊需要

      快速谷歌搜索提供了以下信息:

      ,协议缓冲区是一个很好的选择

      如果该选项不适合您的需要,那么我将考虑将XML发送到客户端(您必须在消息前面加上长度前缀,以便知道要读取多少)然后使用IXmlSerializer的实现,或者将DataContract/DataMember属性与DataContractSerializer结合使用,以获得在.NET中的表示


      我建议不要使用封送属性,因为它们在
      List
      和其他一些您通常使用的标准.NET类上不受支持。

      我检查了所有提到的项目,如protocol buffers、json、xml等。但在我发现后,我使用了这些属性,原因如下:

      • 易于使用的API
      • 可在许多(C,C++,Haskell,Go,Erlang,Perl,PHP,Python,露比,C…,…)中使用
      • 因此二进制文件非常节省空间且速度快(更少字节->更少时间)
      • 平台上的支架(不存在耐久性等问题)
      • 等级制度。数据模型与json(顾名思义)相当,因此大多数数据建模任务都是可以解决的
      • 不需要预编译器
      • wideley使用(Mongodb,多种语言)

      看起来很有用,我想序列化的数据就是JSON?这就是它的样子。不,它是二进制的。现在我也会考虑,虽然它需要一个预编译器。