#c# #python
#c# #python
Вопрос:
Как открыть двоичный файл, созданный приложением C #, на Python? Я знаю структуру файла на C #.
Я пытался найти информацию в Интернете, но не смог.
Структура:
[Serializable]
public class FileClass
{
public ObservableCollection<Class1> OC1 { get; set; }
public Class2 C2 { get; set; }
public Class3 C3 { get; set; }
public FileClass()
{
OC1 = new ObservableCollection<Class1>();
C2 = new Class2();
C3 = new Class3();
}
}
[Serializable]
public class Class1
{
public string Text { get; set; }
public Class1()
{
Text = String.Empty;
}
}
Class2 и Class3 такие же, как Class1.
Прочитать файл:
public FileClass DeSerialization()
{
FileClass data = new FileClass();
BinaryFormatter binFormat = new BinaryFormatter();
using (Stream fStream = new FileStream("test.dat", FileMode.Open, FileAccess.Read, FileShare.None))
{
using (GZipStream gzStream = new GZipStream(fStream, CompressionMode.Decompress))
{
data = (FileClass)binFormat.Deserialize(gzStream);
gzStream.Close();
}
fStream.Close();
}
return data;
}
}
Я знаю, как создать новый двоичный файл на Python, но я не могу перенести файловую структуру из C #.
Как переместить структуру в Python и открыть файл? Если это возможно.
Комментарии:
1. Вероятно, вам придется начать чтение здесь , но на самом деле я бы использовал другой сериализатор (например, ProtoBuf или MessagePack)
2. @John Спасибо, я обязательно это изучу. Насколько я могу понять, мне нужен сериализатор для разных языков. И я не смогу просто перенести структуру. Это тоже не сработает. Я правильно понимаю?
3. В значительной степени. Основы буфера протокола: C # говорит об этом довольно хорошо: «Используйте двоичную сериализацию .NET с
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
и связанными классами. В конечном итоге это становится очень хрупким перед лицом изменений, в некоторых случаях дорогостоящим с точки зрения размера данных. Это также не очень хорошо работает, если вам нужно обмениваться данными с приложениями, написанными для других платформ. » (выделено мной)4. @John, пожалуйста, скажите мне, ProtoBuf или MassagePack являются лучшим решением для моей проблемы? Что вы думаете? Допустим, я написал приложение под Windows, теперь мне нужно переписать на кроссплатформенном фреймворке. И для этого я выбираю Python (Qt). Тогда мне нужен кроссплатформенный и межъязыковой сериализатор. Какое-нибудь правильное приложение на C #, для меня это не проблема. Я хочу оставить C # и использовать кроссплатформенный для этого приложения.
5. Я раньше не использовал ProtoBuf, но это сделано Google, и, похоже, это то, что многие люди используют в настоящее время. MessagePack — это более старый продукт, и я только играл с ним, никогда не использовал его в производстве. Я действительно не могу сказать вам, какой из них лучше, поэтому вам, вероятно, придется оценить их оба (и любые другие существующие варианты).