C++ 中的序列化和 C# 中的反序列化,对于命名管道,反之亦然

Posted

技术标签:

【中文标题】C++ 中的序列化和 C# 中的反序列化,对于命名管道,反之亦然【英文标题】:Serialization in C++ and Deserialization in C# and vice versa for named pipe 【发布时间】:2021-04-03 10:58:31 【问题描述】:

我有两个进程(.exe),一个是用 C++ 实现的,另一个是用 C# 实现的。我想要的是两个过程之间的通信。为此,我选择了“命名管道”方法。我面临的问题是将类对象从一个应用程序传递到另一个应用程序。我可以轻松地发送字符串数据,但我不知道如何将类对象从应用程序发送到另一个。我的班级结构如下:

enum information

 TITLE,
 STATUS,
 DEBUG,
 INFO,
 OTHER
;

class CInformation

  private:
    information _info;
    string _text;
  public:
    void setInformation(information info, string text)  _info = info; _text = text; 
    inline information GetInfo()  return _info; 
    inline string GetText()  return _text; 
;

那么如何在 C++ 中序列化这个类,通过命名管道发送它并在 C# 中反序列化它,反之亦然,同样适用于同一个类。请给我一个例子。我也愿意接受任何其他解决方案,也可以在两个进程之间进行双向通信。

【问题讨论】:

这能回答你的问题吗? Object Sharing between Applications? 【参考方案1】:

就像您选择命名管道一样,您现在必须选择一种序列化方法/约定。如果您的 C++ 代码可以通过 CLI 访问 .Net,那么您将有一个良好的开端,因为您可以确保在两端应用相同的规则。否则,您可以使用 JSON、XML、简单文本字符串甚至二进制等选项。您可能有做出此选择的技术原因(数据和结构与紧凑性等),或者它可能是由工具/框架的可用性驱动的(可能引导您使用 JSON 或 XML)为您进行(反)序列化。请注意,即使是简单的文本字符串,您也必须确保双方使用相同的编码(UTF-8、ASCII、...)。

请注意,C++ 和 C# 没有“语言保证”以任何“兼容”方式实现类,您可以将两个视图相互映射和/或构造类以具有 - 例如 - 相似JSON 序列化布局。

【讨论】:

以上是关于C++ 中的序列化和 C# 中的反序列化,对于命名管道,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用多个可能的命名空间反序列化 xml

JSON中的反序列化和序列化是啥?

如何在 nest.js 中重命名 JSON 字段

c# XmlSerializer 反序列化器缺少默认命名空间

.net 3.5 中的反序列化对象

MVC4 操作中的反序列化对象导致空值