С другой стороны, те кто начинают с Python почти всегда сливаются в последствии в ВУЗах, ибо не осиливают программирование на других языках, требуется сначала вычистить мозг от того подхода, которым готовили к ЕГЭ
required
Export
'а и Import
'а объекта вручную. Наверно придётся писать свой сериализатор на базе System.Reflection
Builder
, т.е. он имеет доступ к приватным конструкторам и может полностью воссоздать требуемый сложный объект по установленным правилам (Реализация Strategy
) Utf8Json
для сериализации/десериализации. Я попытался сделать сериализацию через byte[]
закинув этой всё в файл при помощи BinaryWriter
. При чтении через BinaryReader
я получил аналогичный byte[]
, который должен был восстановить исходный объект, т.к. количество байтов, их последовательность и значения совпадали (Что логично предположить, что объект нормально прочитался в точности 1 в 1), но при попытке десериализации я получил ошибку:System.InvalidOperationException: 'generated serializer for Document does not support deserialize.'
if (string.IsNullOrWhiteSpace(path))
{
path = document.Metadata.SavedAt;
}
string fileName = document.Metadata.DocumentName;
string fileExtension = document.Metadata.Extension;
string fullFileName = $"{fileName}.{fileExtension}";
byte[] documentBytes = JsonSerializer.Serialize(document);
try
{
using (FileStream fileStream = File.Create(fullFileName))
using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
{
binaryWriter.Write(documentBytes);
}
}
catch (Exception ex)
{
return ResponseService<string>.Error(ex.ToString());
}
return ResponseService<string>.Ok(fullFileName);
byte[] readBytes = new byte[0];
using (FileStream fileStream = new FileStream(path, FileMode.Open))
using (BinaryReader binaryReader = new BinaryReader(fileStream))
{
readBytes = binaryReader.ReadBytes((int)binaryReader.BaseStream.Length);
}
try
{
Document result = JsonSerializer.Deserialize<Document>(readBytes);
return ResponseService<Document>.Ok(result);
}
catch (Exception ex)
{
return ResponseService<Document>.Error(ex.ToString());
}
System.Json
мне прямо сказала, что для таких действий нужен public
конструктор без параметров, а NewtonSoft.Json
просто кидало ошибку при попытке чтения символов (Что до сих пор остаётся под вопросом). Далее попробую сделать некие изменения в коде, если всё будет работать, выставлю остаточный ответ private init
?
Это как переменная цикла. Публично, вы можете сказать
for (int i = 0; ... )
, но её конечный вид будет зависеть от количества проходов цикла. С объектами (Тем более, в моём случае) всё на много сложнее, т.к. есть очень большая иерархия