有没有办法把C#序列化的对象读入Python?

2024-10-01 17:33:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含C#序列化对象的二进制文件。在

我可以用python阅读内容,但得到的结果类似于:

'T\x00\x00\x00Test.Jobs.GenerateJobRequest, POC.Server\xca\x02-\xa2\x02\t\x82\x01\x06\x1a\x04myahR\x1d\x08\xfe\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x10Data Lite Exportp\t\n\x16Do_Ko_Change-Job__ID_23\x10\x0c\x18\xa7\xb9\x18(\x012\x00:\x00H\xbc\x08')

有没有一种方法可以在python中反序列化这个对象?在

我同意这不是一个最佳的解决方案,JSON、XML会更好。但是,我不能控制序列化数据的过程,我只是消费者。在


Tags: 文件对象内容序列化二进制jobsx00x01
3条回答

二进制序列化数据没有正式的文档格式。我遇到的最接近的是http://primates.ximian.com/~lluis/dist/binary_serialization_format.htm。因此,获得第三方Python包的可能性很小。即使是这样,将来也有可能破裂。在

如果您想坚持二进制序列化,最好的办法是使用IronPython并依赖CLR来序列化数据。在

否则,对于CLR之外的互操作性,可以使用SOAP或XML序列化。在

如上所述,您可以使用pythonnet和clr。它不再是真正的Python,但它应该得到你想要的东西。。。在

import clr
import System
#requires pythonnet installed -> pip install pythonnet 
clr.AddReference("YourDLLAssemblyName") # usually requires dll to be within directory

from System.Runtime.Serialization.Formatters.Binary import BinaryFormatter
from System.IO import FileStream,FileMode,FileAccess,FileShare

filepath = '<PathToYourDataFile>'
serializer = BinaryFormatter()
reader = FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.None)
data = serializer.Deserialize(reader)
print(data, data.GetType())
#from here on you can propably go on via reflection or try to cast it
reader.Close()

从您的问题来看,不清楚您使用的是哪个版本的Python(CPython、Jython、IronPython)。但我假设您使用的是CPython,对于IronPython来说,这将是微不足道的。在

有一个CPython的库,Python .NET。它作为.NET和Python之间的绑定,工作非常好。甚至支持泛型。虽然它似乎不再被积极支持,但我已经使用它一段时间了。它就像一个符咒。在

您将需要visualstudio来编译它,但它可能可以与visualstudioexpress一起使用(尽管我不知道)。在

这样,您就可以导入任何.NET dll。假设您可以用C#反序列化它,那么您也应该能够用Python反序列化它。在

相关问题 更多 >

    热门问题