2013-02-02 53 views
1

如何使用rapidjson将对象序列化为std :: string? 我已经实现如何使用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 

    } 
} 

问题在连载的功能是什么回来?

回答

2

没有。你已经发送到stdout

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

通过快速浏览文档,StringBuffer看起来很有前途。这是GenericStringBuffer<UTF8<> >的类型别名。

0

试试这个:

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

    Serialize(writer); 

    return buffer.GetString(); 
} 
2

问题是很老,如果你还在寻找答案,那么这里就是由@Lightness种族在轨道

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(); 
    } 
} 

建议的一个你也可以在这里查看示例代码:simplewriter.cpp