C++ 如何使用rapidjson(已实现的序列化)将对象序列化为std::string?

C++ 如何使用rapidjson(已实现的序列化)将对象序列化为std::string?,c++,json,C++,Json,如何使用rapidjson将对象序列化为std::string? 我已经实施了 class Person{ public: std::string name; uint64 id; // uint64 is typedef template <typename Writer> void Serialize(Writer& writer) const { writer.StartObject(); writer.

如何使用rapidjson将对象序列化为std::string? 我已经实施了

class Person{
public:
    std::string name;
    uint64 id; // uint64 is typedef

    template <typename Writer>
    void Serialize(Writer& writer) const {
        writer.StartObject();
        writer.String("name");
        writer.String(name);
        writer.String(("id"));
        writer.Uint64(id);
        writer.EndObject();
    }
     std::string serialize(){
        FileStream s(stdout);
        PrettyWriter<FileStream> writer(s);   
        Serialize(writer);
        return  ? /// There is a problem

    }
}
班级人员{
公众:
std::字符串名;
uint64 id;//uint64是typedef
模板
无效序列化(写入程序和写入程序)常量{
writer.StartObject();
writer.String(“name”);
writer.String(名称);
writer.String((“id”);
writer.Uint64(id);
writer.EndObject();
}
std::string serialize(){
文件流s(标准输出);
漂亮的作家;
连载(作者);
返回?///出现问题
}
}

序列化函数中的问题是返回什么?

无。您已将其发送到
stdout

如果不想将输出流式传输到文件,请不要使用
FileStream
;使用另一个模板参数来
PrettyWriter
,它存储并允许您提取字符串

快速浏览一下文档,您会发现它很有希望。它是
GenericStringBuffer的类型别名

请尝试以下操作:

std::string serialize() {
  GenericStringBuffer<UTF8<> > buffer;
  Writer<GenericStringBuffer<UTF8<> > > writer(buffer);

  Serialize(writer);

  return buffer.GetString();
}
std::string serialize(){
GenericStringBuffer缓冲区;
写入器(缓冲区);
连载(作者);
返回buffer.GetString();
}

这个问题已经很老了,若你们还在寻找答案,那个么这里就是@Lightness Races in Orbit所建议的答案

class Person{
public:
    std::string name;
    uint64 id; // uint64 is typedef

    template <typename Writer>
    void Serialize(Writer& writer) const {
        writer.StartObject();
        writer.String("name");
        writer.String(name);
        writer.String(("id"));
        writer.Uint64(id);
        writer.EndObject();
    }
     std::string serialize(){
        StringBuffer s;
        Writer<StringBuffer> writer(s);
        Serialize(writer);
        return  s.GetString();
    }
}
班级人员{
公众:
std::字符串名;
uint64 id;//uint64是typedef
模板
无效序列化(写入程序和写入程序)常量{
writer.StartObject();
writer.String(“name”);
writer.String(名称);
writer.String((“id”);
writer.Uint64(id);
writer.EndObject();
}
std::string serialize(){
缓冲带;
撰稿人;
连载(作者);
返回s.GetString();
}
}
您还可以在此处查看示例代码: