Mam niektóre dane Pythona, serializowane do ogórki i trzeba użyć go w programie C#. Czy istnieje sposób deserializacji pikle Pythona w C#? Nie mogę zmienić format danych do JSON lub itpJak mogę deserializować pikle Pythona w języku C#?
Odpowiedz
Mówisz, że nie możesz zmienić programu, który generuje pikle. Ale na pewno możesz napisać oddzielny program w języku Python, aby odczytać pikle i zapisać go ponownie jako JSON?
import json, pickle
with open("data.pickle", "rb") as fpick:
with open("data.json", "w") as fjson:
json.dump(pickle.load(fpick), fjson)
cytat z documentation
:
Format danych używany przez zalewie Python jest specyficzny. Ma to zaletę, że nie ma ograniczeń nałożonych przez zewnętrzne standardy , takie jak XDR (które nie mogą reprezentować współdzielenia wskaźnika); jednak oznacza to, że programy inne niż Python mogą nie być w stanie zrekonstruować obiektów Python .
Więc odpowiedź na twoje pytanie brzmi: nie, nie możesz deserializować go w języku C#. Będziesz musiał użyć formatu interoperacyjnego, takiego jak XML lub JSON, jeśli chcesz komunikować się z innymi platformami.
Możesz wypróbować embedding IronPython i wypakować stamtąd, a następnie udostępnić niezadrukowany obiekt aplikacji C#.
Należy zauważyć, że pikle są zaprojektowane do serializacji obiektów Python, więc to podejście działa tylko wtedy, gdy masz bardzo proste obiekty z wyraźnym odwzorowaniem na ekwiwalenty C#. Wymaga również, aby twoje środowisko IronPython miało dostęp do wszystkich modułów definiujących klasy wszystkich obiektów zawartych w pikle (tak jak w CPython).
Powinieneś spróbować serializować swoje dane w inny, bardziej interoperacyjny sposób (np. JSON lub XML), jeśli to możliwe.
Uruchamiamy skrypty w języku Python z języka C#, w którym pracuję. Nie pamiętam dokładnie nazwy potrzebnego zestawu (myślę, że Microsoft.Scripting). – BenDundee