2013-02-17 4 views

risposta

5

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

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.

3

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.

+0

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