boost.python と py++ を使用して共有ライブラリを作成しました。ライブラリで定義された型からオブジェクトをインスタンス化できます。これらのオブジェクトをjson経由でエンコード/デコードしたい。jsonpickle
モジュールを使用しています。ただし、属性はエンコードされません。私はいくつかの研究をしました。__dict__
エンコードされたオブジェクトが空であるため、問題が発生する可能性が最も高いです。
共有ライブラリのサンプル クラス:
struct Coordinate
{
int x;
int y;
Coordinate(int aX, int aY);
};
これは python ラッパーです:
BOOST_PYTHON_MODULE(pyplusplus_test){
bp::class_< Coordinate >( "Coordinate", bp::init< int, int >(( bp::arg("aX"), bp::arg("aY") )) )
.enable_pickling()
.def_readwrite( "x", &Coordinate::x )
.def_readwrite( "y", &Coordinate::y );
//...
}
Python からのコード部分:
cord = pyplusplus_test.Coordinate(10,10)
cord.x = 23
cord.y = -11
tmpStr = jsonpickle.encode(cord)
print tmpStr
そして、出力:
{"py/object": "pyplusplus_test.Coordinate"}
json 出力にx
orがないことに注意してください。y
なにか提案を?
ありがとう。