2013-02-17 7 views

Odpowiedz

5

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) 
2

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.

3

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.

+0

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