У меня есть библиотека классов, класс которой помечен как [Сериализуемый]. Если я ссылаюсь на проект напрямую, я могу сериализовать класс с помощью BinaryFormatter:
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
var data = ms.ToArray();
Однако, если я опубликую библиотеку классов через nuget, она теряет атрибут [Serializable] и больше не может быть преобразована вбайтовый массив с использованием BinaryFormatter.
Есть ли способ сохранить класс AS-IS при создании .nupkg? В настоящее время я просто использую Visual Studios Generate Nuget Package при сборке.
После дальнейшего изучения позвольте мне уточнить мои выводы.
* Если у вас есть .net472 WebAPI и библиотека классов .net472, и вы публикуете библиотеку классов через nuget, все работает. Я использовал BinaryFormatter для сериализации объекта, помеченного атрибутом [Serializable], его успешной отправки на сервер и возможности десериализации.
* Если у вас есть библиотека .netstandard 2.0, и вы публикуетеон выходит в консольный проект .netstandard и пытается сериализовать его с помощью бинарного форматера, который, как вы получите, не помечен как сериализуемый (даже если он помечен).
* Если у вас есть библиотека .net472, и вы публикуете ее в консольном приложении netstandard 2.0, я не смог сериализовать класс, но это произошло по другим причинам, в случае, если я получил ошибку:
Тип 'System.Text.Encoding' в сборке 'System.Private.CoreLib, версия = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 7cec85d7bea7798e' не помечен как сериализуемый. '
ВКороче говоря, если вам действительно нужна двоичная сериализация, я не знаю ни одного другого варианта, кроме как для клиента и сервера для поддержки полной библиотеки фреймворка, а не ядра / netstandard.