Ich habe ein Problem beim Abrufen von Daten aus einem C# Array serialisierten Klasse mit Python. Ich habe zwei Dateien mit den Klassen. Die erste Möglichkeit ist, das Array zu durchlaufen und die öffentlichen Variablen zu erfassen. In der zweiten Datei sehe ich die Klasse, kann aber nicht auf eine der Variablen zugreifen. Es ist 10+ Jahre her, dass ich C# benutzt habe und meinen Kopf gegen den Computer geschlagen habe. Der einzige Unterschied, den ich sehen kann, ist file1.bin verwendet String wo file2.bin String verwendet. Irgendwelche Hinweise wären mot hilfreich.Python öffnen Sie eine serialisierte C# -Datei
ironpython verwendet, um .bin-Dateien zu lesen.
from System.Runtime.Serialization.Formatters.Binary import BinaryFormatter
from System.IO import FileStream, FileMode, FileAccess, FileShare
from System.Collections.Generic import *
def read(name):
bformatter = BinaryFormatter()
file_stream = FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read)
res = bformatter.Deserialize(file_stream)
file_stream.Close()
return res
def write(name,data):
bformatter = BinaryFormatter()
stream = FileStream(name, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)
bformatter.Serialize(stream, data)
stream.Close()
res = read('fiel2.bin')
for space in res:
print dir(space)
File1.bin - (vereinfacht) Array von Resident - Zugangsdaten können
namespace RanchoCSharp
{
[Serializable]
public class Resident
{
public Resident()
{
}
public Resident(String fName, String lName)
{
firstN = fName;
lastN = lName;
}
//Invoice info
public String firstN;
public String lastN;
}
}
file2.bin (vereinfacht) Array von Resident Info Kein Zugriff auf Daten
namespace Rancho_Resident
{
[Serializable]
class ResidentInfo
{
public ResidentInfo()
{
}
public string unit;
public string space;
}
}
update
Nach näherem Hinsehen scheint es, dass eine Klasse s ist öffentlich und das andere ist intern. Ich bin mir jedoch nicht sicher, wie ich auf die interne Klasse zugreifen soll.
Fun Problem :) String und String sind die gleiche Sache. Ich würde denken, dass es wahrscheinlicher verschiedene Versionen von .Net ist und dass Serialisierung ein wenig anders aussieht jetzt – Leon
Gerade bemerkt, dass file1.bin eine öffentliche Klasse ist, wo file2.bin nicht ist. Könnte das das Problem sein? – briarfox
Also ist das Problem jetzt eher in den Reihen, dass Sie die Klasse überhaupt nicht serialisieren können? – Leon