pickles にシリアル化された Python データがいくつかあり、C# プログラムで使用する必要があります。C#でPythonのピクルスを逆シリアル化する方法はありますか? データ形式を JSON などに変更できません。
5 に答える
あなたは、ピクルスを生成するプログラムを変更できないと言います。しかし、別の Python プログラムを作成して、ピクルスを読み取り、JSON として再度書き出すことはできますか?
import json, pickle
with open("data.pickle", "rb") as fpick:
with open("data.json", "w") as fjson:
json.dump(pickle.load(fpick), fjson)
からの引用documentation
:
pickle で使用されるデータ形式は Python 固有です。これには、XDR (ポインターの共有を表すことができない) などの外部標準による制限がないという利点があります。ただし、これは非 Python プログラムがピクルされた Python オブジェクトを再構築できない可能性があることを意味します。
したがって、あなたの質問に対する答えはノーです。C# で逆シリアル化することはできません。他のプラットフォームと通信する必要がある場合は、XML や JSON などの相互運用可能な形式を使用する必要があります。
IronPythonを埋め込み、そこから unpickle してから、unpickle オブジェクトを C# アプリケーションで使用できるようにしてみてください。
pickle はPythonオブジェクトをシリアル化するように設計されているため、このアプローチは、C# の同等物への明確なマッピングを持つ非常に単純なオブジェクトがある場合にのみ機能することに注意してください。また、IronPython 環境が pickle に含まれるすべてのオブジェクトのクラスを定義するすべてのモジュールにアクセスできる必要があります (CPython と同じ)。
可能であれば、他のより相互運用可能な方法 (JSON や XML など) でデータをシリアル化するようにしてください。