【发布时间】:2017-01-17 07:19:43
【问题描述】:
我想将匿名类型变量转换为字节[],我该怎么做?
我尝试了什么:
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();
}
我有错误:
类型异常 'System.Runtime.Serialization.SerializationException' 发生在 mscorlib.dll 但未在用户代码中处理
版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]' 在程序集'MyProject,版本=1.0.0.0,文化=中性, PublicKeyToken=null' 未标记为可序列化。附加 信息:键入'f__AnonymousType10`2[[System.String, mscorlib,
有人可以帮助我吗?我做错了什么?或者这是不可能的?
【问题讨论】:
-
你“做”错的是期望匿名类型可以用 BinaryFormatter 序列化,基本上。正如错误所说,该类型没有被标记为可序列化 - 这并不让我特别惊讶。对于支持序列化的匿名类型将是一个非常令人头疼的问题,并且无论如何都不适用于不可序列化的属性类型。
-
您是否考虑过使用真实类型,并将其标记为可序列化?
-
添加了匿名类型以更轻松地支持 LINQ,以避免必须为所有内容创建命名类型。它们不打算用于长期持久性、传输,甚至不用于在程序内部传递。它们旨在在本地使用。因此,匿名类型未标记为可序列化。由于二进制序列化的使用意味着您稍后想要反序列化它们,如果您告诉我们您想要在功能方面完成什么会更好,然后也许人们可以提出比“对不起,可以”更好的答案没有完成”。
标签: c# serialization anonymous