Ho alcuni dati python, serializzati in sottaceti e ho bisogno di usarli nel programma C#. Quindi c'è un modo per deserializzare i sottaceti Python in C#? Non posso cambiare il formato dei dati di JSON o eccCome posso deserializzare i sottaceti Python in C#?
risposta
Si dice che non è possibile modificare il programma che genera il sottaceto. Ma sicuramente puoi scrivere un programma Python separato per leggere il pickle e scriverlo di nuovo come JSON?
import json, pickle
with open("data.pickle", "rb") as fpick:
with open("data.json", "w") as fjson:
json.dump(pickle.load(fpick), fjson)
Citazione dal documentation
:
Il formato dei dati usati per salamoia è Python-specifiche. Questo ha il vantaggio che non ci sono restrizioni imposte dagli standard esterni come XDR (che non può rappresentare la condivisione del puntatore); comunque significa che i programmi non Python potrebbero non essere in grado di ricostruire gli oggetti in Python decapitati .
Quindi la risposta alla tua domanda è no, non puoi deserializzare in C#. Dovrai utilizzare un formato interoperabile come XML o JSON se hai bisogno di comunicare con altre piattaforme.
Si può provare embedding IronPython e deselezionare da lì, quindi rendere disponibile l'oggetto non aggiornato all'applicazione C#.
Nota che i sottaceti sono progettati per serializzare gli oggetti Python, quindi questo approccio funziona solo se si dispone di oggetti molto semplici con associazioni chiare agli equivalenti C#. Richiede inoltre che l'ambiente IronPython abbia accesso a tutti i moduli che definiscono le classi di tutti gli oggetti contenuti nel pickle (come in CPython).
Si dovrebbe provare a serializzare i dati in un altro modo più interoperabile (come JSON o XML) se possibile.
Eseguiamo script Python da C# in cui lavoro. Non riesco a ricordare il nome esatto dell'assembly di cui hai bisogno (penso che Microsoft.Scripting). – BenDundee