BinaryFormatter
отлично работает, но не существует в переносимых библиотеках классов для .NET 4.5.
Я читал, что он есть в .NET 4.6 Portable. Я не подтвердил это, потому что, когда я перехожу на 4.6 в настройках своего проекта, я получаю предупреждающее сообщение о том, что «4.5 будет автоматически выбран», если я не отключу Silverlight, WindowsPhone, Windows Universal, Xamarin и т. Д.), Поэтому я могу только target .NET 4.6 Portable, если я НЕ нацеливаюсь на дополнительные платформы, что противоречит цели.
Вот мой оригинальный BinarySerializer (работает, но НЕ PCL, потому что использует BinaryFormatter
)
private string BinarySerialize(object Source)
{
byte[] serializedObject;
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, Source);
serializedObject = stream.ToArray();
}
return Convert.ToBase64String(serializedObject);
}
Итак, как уже было сказано, я начал пытаться переписать свой BinarySerializer, чтобы использовать BinaryReader
и BinaryWriter
, которые доступны в PCL, и столкнулся со следующими проблемами:
BinaryWriter
, может обрабатывать только простые типы (например, string
, bool
, byte
, long
, int
и т. Д.) И Streams
, поэтому думаю, мне нужно найти способ преобразовать анонимные объекты в Stream
.
Я на правильном пути? Как преобразовать типы, которые неизвестны до времени выполнения (например, System.Delegate
- и да, я знаю, что сериализация делегатов приводит к нестабильному коду) или анонимные \ общие типы в их эквивалентный массив байтов byte[]
? Есть ли способ преобразовать объект напрямую в Stream
или MemoryStream
?
Если это вообще невозможно, как бы вы порекомендовали мне написать interface
для моего BinarySerializer, чтобы я мог реализовать функциональность в своей переносимой библиотеке классов, в то время как фактические классы BinaryFormatter
, реализующие interface
, существуют в сборках, зависящих от платформы?
К вашему сведению, это проект MVVM, в котором «сериализаторы» считаются моделями, производными от ValueConverter
абстрактного базового класса. Сериализация используется только для транспортировки созданных задач к месту назначения для выполнения.
Conditions
, который впоследствии может быть десериализован и выполнен для набора данных. Я пытаюсь разрешить настраиваемые (типизированные) правила (любыеFunc<dataTypeT,bool>
), а также разрешить существованиеFunc<dataTypeT>
вместо фактическогоdataTypeT
в параметрахCondition
. Спасибо - person epicTurk   schedule 30.03.2016BinaryFormatter
не поддерживается в переносимой библиотеке классов (согласно документации, в которой отсутствует какое-либо упоминание) и, вероятно, никогда не будет, потому что он поддерживает инфраструктуру удаленного взаимодействия, а удаленное взаимодействие в целом считается устаревшим (за исключением доменов приложений, но это также выходит за рамки PCL). Тем не менее, существуют некоторые независимые усилия. - person Jeroen Mostert   schedule 04.05.2016