有没有一种简单的方法可以用c ++(xml或二进制)序列化数据,然后在C#中反序列化数据?
我正在使用一些不能运行.Net的远程WINNT机器。我的服务器应用程序完全用C#编写,所以我想要一种简单的方法来共享简单的数据(主要是键值对,也许是SQL结果集的一些表示)。我认为最好的方法是在客户端以某种预定义格式将数据写入xml,将xml文件传输到我的服务器,并让C#包装器将xml读入可用的c#对象。
客户端和服务器通过tcp连接进行通信,我真正想要的是将客户端内存中的数据序列化,通过套接字将二进制数据传输到ac#内存流,我可以将其反序列化为ac#对象(消除文件)创造,转移等),但我不认为这样的事情存在。随意赐教。
编辑
我知道我可以在c ++应用程序中创建一个结构并在c#中定义它并以这种方式传输数据,但在我的脑海中,感觉就像我限制了可以发送的内容。我必须为对象等设置预定义的大小
协议缓冲区 可能对你有用。
协议缓冲区是Google与语言无关,平台无关的可扩展机制,用于序列化结构化数据 - 想想XML,但更小,更快,更简单。您可以定义数据的结构化时间,然后使用特殊生成的源代码,可以使用各种语言(Java,C ++或Python)轻松地在各种数据流中编写和读取结构化数据。
.NET端口可从 马克格拉维尔 和 Jon Skeet。
协议缓冲区 可能对你有用。
协议缓冲区是Google与语言无关,平台无关的可扩展机制,用于序列化结构化数据 - 想想XML,但更小,更快,更简单。您可以定义数据的结构化时间,然后使用特殊生成的源代码,可以使用各种语言(Java,C ++或Python)轻松地在各种数据流中编写和读取结构化数据。
.NET端口可从 马克格拉维尔 和 Jon Skeet。
我检查了所有提到的项目,如prottocol缓冲区,json,xml等,但在我找到之后 BSON 我使用它是因为以下原因:
- 易于使用的API
- 有很多种 语言 (C,C ++,Haskell,Go,Erlang,Perl,PHP,Python,Ruby,C#,......)
- 二进制因此非常节省空间和快速(更少的字节 - >更少的时间)
- 在平台上保持一致(没有endianess等问题)
- 分层。数据模型与json(顾名思义)相当,因此大多数数据建模任务都应该是可解决的。
- 无需预编译器
- wideley使用(Mongodb,多种语言)
C ++没有结构内省(你无法在运行时找到类的字段),因此没有编写C ++对象的通用机制。您必须采用约定并使用代码生成,或者(更典型地)自己编写序列化。
有一些标准格式的库,如ASN.1,HDF5等,它们是实现语言中立的。有专有的库可以实现相同的目的(例如协议缓冲区)。
如果您的目标是特定的体系结构和编译器,那么您也可以将C ++对象转储为原始字节,并在C#端创建解析器。
更好的方法取决于您希望端点的耦合程度,以及数据主要是数字(HDF5),树和序列结构(ASN.1),还是简单的普通数据对象(直接在内存中写入值)
如前所述,Protocol Buffers是一个不错的选择。
如果该选项不适合您的需求,那么我会考虑将XML发送到客户端(您必须在消息前加上长度,以便知道要阅读多少),然后使用IXmlSerializer的实现或使用DataContract / DataMember属性与DataContractSerializer一起使用,以获得在.NET中的表示。
我建议不要使用编组属性,因为它们不支持 List<T> 以及您通常会使用的许多其他标准.NET类。
您可以选择许多选项。命名管道,共享
记忆,DDE,远程...取决于您的特殊需求。
快速谷歌搜索给出了以下内容:
命名管道
命名共享内存
DDE