2016-10-13 42 views
0

我应该如何继续序列化一个嵌套对象?谷物嵌套对象

例子:

class B 
{ 
public: 
    int y; 

    template<class Archive> 
    void serialize(Archive& ar) 
    { 
     ar(CEREAL_NVP(y)); 
    } 
} 

class A 
{ 
public: 
    int x; 
    std::vector<B> nested; 

    template<class Archive> 
    void serialize(Archive& ar) 
    { 
     ar(CEREAL_NVP(x) what about nested?) 
    } 
} 

主要的想法是有东西像

{ 
    "x": ... 
    "nested": [ 
     { 
     "y": ... 
     }, 
     { 
     "y": ... 
     } 
    ] 
} 

顺便说一句,如果可以的话第二个问题。 我可以从这样的json获得一个A对象吗? 谢谢你们=)

回答

1

所有你需要做的是包括序列化std::vector#include <cereal/types/vector.hpp>支持),并把它添加到你的电话到存档:

ar(CEREAL_NVP(x), CEREAL_NVP(nested)); 

下面是一个完整的例子也说明了如何保存到JSON然后加载数据回:

#include <cereal/archives/json.hpp> 
#include <cereal/types/vector.hpp> 

class B 
{ 
    public: 
    int y; 

    template<class Archive> 
    void serialize(Archive& ar) 
    { 
     ar(CEREAL_NVP(y)); 
    } 
}; 

class A 
{ 
    public: 
    int x; 
    std::vector<B> nested; 

    template<class Archive> 
    void serialize(Archive& ar) 
    { 
     ar(CEREAL_NVP(x), CEREAL_NVP(nested)); 
    } 
}; 

int main() 
{ 
    std::stringstream ss; 
    { 
    cereal::JSONOutputArchive ar(ss); 
    A a = {3, {{3},{2},{1}}}; 
    ar(a); 
    } 

    std::cout << ss.str() << std::endl; 

    { 
    cereal::JSONInputArchive ar(ss); 
    A a; 
    ar(a); 

    cereal::JSONOutputArchive ar2(std::cout); 
    ar2(a); 
    } 
} 

其给出作为输出:

{ 
    "value0": { 
     "x": 3, 
     "nested": [ 
      { 
       "y": 3 
      }, 
      { 
       "y": 2 
      }, 
      { 
       "y": 1 
      } 
     ] 
    } 
} 
{ 
    "value0": { 
     "x": 3, 
     "nested": [ 
      { 
       "y": 3 
      }, 
      { 
       "y": 2 
      }, 
      { 
       "y": 1 
      } 
     ] 
    } 
}