跨语言对象序列化 MGen

MIT
Java C/C++ Python JavaScript
跨平台
2014-12-21
红薯

MGen 是一个支持跨语言的对象序列化项目,由以下两部分组成:

  • 源码生成的工具 ( MGen 编译器 )

  • 语言的支持库

MGen 类似 Gooogle 的 Protocol Buffers ,可序列化到 JSON 和二进制格式。

目前支持的语言有:

  • C++

  • Java

  • JavaScript

示例代码:

#include <com/fruitcompany/ClassRegistry.h>
#include <mgen/serialization/JsonPrettyWriter.h>
#include <mgen/serialization/JsonReader.h>

using namespace mgen;
using namespace com::fruitcompany;
using namespace com::fruitcompany::fruits;

// A class registry for type identification
const ClassRegistry registry;

std::string toJSON(const MGenBase& object) {

  // Create a target to stream the object to
  std::stringstream stream;

  // Create a writer object
  JsonPrettyWriter<std::stringstream, ClassRegistry> writer(stream, registry);

  // Write the object
  writer.writeObject(object);

  // Return the written string
  return stream.str();
}

template <typename T>
T fromJSON(const std::string& json) {

  // Create a data source to stream objects from
  std::stringstream stream(json);

  // Create a reader object
  JsonReader<std::stringstream, ClassRegistry> reader(stream, registry);

  // Read object. You can read T* polymorphicly with reader.readObject<T>()
  return reader.readStatic<T>();
}

int main() {

  // Create some objects
  const Apple apple(Brand_A, 4);
  const Banana banana = Banana().setLength(5).setBrand(Brand_B);

  // Serialize them to JSON and print them
  std::cout << toJSON(banana) << std::endl;
  std::cout << toJSON(apple) << std::endl;

  // Read the objects back from their serialized form
  const Apple appleBack = fromJSON<Apple>(toJSON(apple));
  const Banana bananaBack = fromJSON<Banana>(toJSON(banana));

  // Check that they are still the same
  std::cout << (apple == appleBack) << std::endl;
  std::cout << (banana == bananaBack) << std::endl;

  return 0;
}
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

.net从二进制资源中逆向出文件。

.NET(C#):使用IResourceReader,IResourceWriter和ResourceSet 注意: 这是另一篇文章“.NET(C#):浅谈程序集清单资源和RESX资源”的一部分。 所有提及类均在:System.Resources命名空间内。...

2013/09/06 19:44
145
0
iOS: 使用AVAudioRecorder中遇到的问题

此博客解决了我在开发时所遇到的问题 转载与此处:http://www.cnblogs.com/mgen/p/3374987.html 目录 1. 关于录音和Audio Session Categories 2. 分贝数据的处理 3. iOS 7中默认配置的变化 ...

2015/02/01 14:03
48
0
【转】NSTimer

转自:http://www.cnblogs.com/mgen/p/3276722.html 1. NSRunLoopCommonModes和Timer 当使用NSTimer的scheduledTimerWithTimeInterval方法时。事实上此时Timer会被加入到当前线程的Run Loop中...

2013/08/23 11:58
513
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部