如何在C#中反序列化python pickle

本文关键字:反序列化 python pickle | 更新日期: 2023-09-27 17:59:41

我有一些python数据,已序列化为pickle,需要在C#程序中使用。那么,有什么方法可以在C#中反序列化python pickle吗?我无法将数据格式更改为JSON等。

如何在C#中反序列化python pickle

您说您不能更改生成pickle的程序。但是,您肯定可以编写一个单独的Python程序来读取pickle,并将其再次写成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程序可能无法重建pickled Python对象。

所以你的问题的答案是否定的,你不能在C#中反序列化它。如果需要与其他平台进行通信,则必须使用可互操作的格式,如XML或JSON。

您可以尝试嵌入IronPython并从中取消拾取,然后使取消拾取的对象可用于C#应用程序。

请注意,pickle是为序列化Python对象而设计的,因此这种方法只有在具有到C#等价物的清晰映射的非常简单的对象时才有效。它还要求您的IronPython环境能够访问定义pickle中包含的所有对象的类的所有模块(与CPython中相同)。

如果可能的话,您应该尝试以其他更具互操作性的方式(如JSON或XML)序列化数据。

热解岩有一个Unpickler类,它将把泡菜变成一个对象。

现在有一个NuGet-Razorvine.Pickle,用于在.NET.

中序列化和反序列化Pickle文件