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.
- 1. Składnia pikle Pythona
- 2. Jak deserializować przestrzenie nazw XML w języku C# (System.Xml.Serialization)?
- 3. Jak deserializować tylko część dokumentu XML w języku C#
- 4. Deserializować ciąg znaków JSON w języku C# bez użycia refleksji
- 5. Tworzenie klasy Pythona w języku C#
- 6. Jak mogę odczytać bazę danych/plik Pythona z C?
- 7. Jak czytać plik pikle?
- 8. Jak mogę wdrożyć IRandomAccessStream w języku C#?
- 9. Czy mogę deserializować json do anonimowego typu w C#?
- 10. Jak mogę zdemontować skrypt w języku Python?
- 11. Czy można serializować i deserializować klasy w C++?
- 12. Uruchomić konkretną funkcję Pythona w języku C# z IronPythonem
- 13. Jak mogę uzyskać całkowitą pamięć fizyczną w języku C#?
- 14. Jak mogę uzyskać datę i wersję sterowników w języku C#?
- 15. Jak mogę usunąć obiekt z DbContext w języku C#?
- 16. Jak mogę wykonać polecenie wsadowe bezpośrednio w języku C#?
- 17. Jak mogę śledzić subskrybentów wydarzenia w języku C#?
- 18. Jak mogę sprawdzić identyfikator witryny IIS w języku C#?
- 19. Jak mogę uniknąć niemożliwego stanu boolowskiego w języku C#?
- 20. Jak mogę uzyskać bieżący krótki format DateTime w języku C#?
- 21. Jak mogę tworzyć parametry `out` w języku C#?
- 22. Jak mogę zwinąć wszystkie # regiony i metody w języku C#?
- 23. Jak mogę wyczyścić subskrypcje zdarzeń w języku C#?
- 24. Jak mogę wdrożyć własną blokadę TaS w języku C#?
- 25. Jak wykonać plik powłoki w języku C#?
- 26. Jak można deserializować ciąg JSON w Mono?
- 27. Preferowane (lub najczęstsze) rozszerzenie plików pikle?
- 28. Jak deserializować oData JSON?
- 29. Jak serializować/deserializować hashmap?
- 30. Deserializować ciąg JSON do C# obiektu
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