Я хотел бы преобразовать переменную анонимного типа в byte [], как я могу это сделать?Сериализация анонимных типов
Что я пробовал:
byte[] result;
var my = new
{
Test = "a1",
Value = 0
};
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms, my); //-- ERROR
result = ms.ToArray();
}
Я получил сообщение об ошибке:
An exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll but was not handled in user code
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' in Assembly 'MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.Additional information: Type '<>f__AnonymousType10`2[[System.String, mscorlib,
Может кто-нибудь мне помочь? Что я делаю неправильно? Или это невозможно сделать?
Что вы делаете неправильно, вы ожидаете, что анонимные типы будут сериализованы с BinaryFormatter, в основном. Как говорит ошибка, тип не помечен как сериализуемый, что меня не особенно удивляет. Для анонимного типа для поддержки сериализации будет значительная головная боль, и в любом случае она не будет работать для несериализуемых типов свойств. –
Вы считали, что используете реальный тип и помечены как сериализуемые? –
Анонимные типы были добавлены для облегчения поддержки LINQ, чтобы избежать необходимости создавать именованные типы для всего. Они не предназначены для долговременного сохранения, транспортировки или даже для прохождения внутри вашей программы. Они предназначены для использования на местном уровне. Таким образом, анонимные типы не помечены как сериализуемые.Поскольку использование двоичной сериализации означает, что вы позже захотите их десериализовать, было бы лучше, если бы вы сказали нам, что вы хотите достичь с точки зрения функциональности, а затем, возможно, люди могут придумать лучший ответ, чем «извините, t сделать ». –