У меня возникла проблема с получением данных из сериализованного класса C# с помощью python. У меня есть два файла, содержащие классы. Во-первых, я могу зацикливать массив и захватить общедоступные переменные. Однако во втором файле я вижу класс, но не могу получить доступ к любой из переменных. Прошло уже 10 лет, так как я использовал C# и бил головой о компьютер. Единственное различие, которое я вижу, это file1.bin использует String, где file2.bin использует строку. Любые указатели были бы полезны.python открыть сериализованный файл C#
ironpython используется для чтения .bin файлов.
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 - (упрощенно) массив Resident - может получить доступ к данным
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 (упрощенный) Массив Resident информации Не удается получить доступ к данным
namespace Rancho_Resident
{
[Serializable]
class ResidentInfo
{
public ResidentInfo()
{
}
public string unit;
public string space;
}
}
обновление
После того, как вы приблизились, кажется, что один клас s является общедоступным, а другой является внутренним. Однако я не уверен, как получить доступ к внутреннему классу.
Fun проблема :) Строка и струне являются то же самое. Я думаю, что это скорее другие версии .Net, и эта сериализация выглядит немного иначе. – Leon
Просто заметил, что file1.bin - это открытый класс, где file2.bin - нет. Это может быть проблема? – briarfox
так теперь проблема в том, что вы не можете сериализовать класс вообще? – Leon