2016-10-13 4 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?) 
    } 
} 

は、主なアイデアは、私は可能性がある場合は、ちなみに2番目の質問を

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

のようなものを持っていることです。 このようなJSONからAオブジェクトを再度取得できますか?ここで

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

も示し完全な例です: は、すべてを行う必要がstd::vector#include <cereal/types/vector.hpp>)をシリアル化するためのサポートが含まれており、アーカイブへのお電話にそれを追加している)=あなた

答えて

1

をみんなありがとう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 
      } 
     ] 
    } 
} 
関連する問題