二进制写入(var/object)
本文关键字:object var 二进制 | 更新日期: 2023-09-27 18:15:00
在我的程序中,我将在运行时获得var
对象,我想将其写入二进制文件,但我无法通过使用BinaryWriter
来编写var
变量。给出了cannot convert from 'object' to 'bool'
。如何解决?
BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create)
var obj = Convert.ChangeType(property.GetValue(objectToWrite, null), property.PropertyType);
writer.Write(obj); //Compile error
var
在这种情况下将解析为object
,因为这是GetValue
返回的。没有接受object
的BinaryWriter.Write
重载。接下来你想要什么取决于以下几点:
-
如果你的意图是写一个非常简单的值(单个
bool
,int
等-BinaryWriter
支持的东西)到一个文件,那么你将不得不打开这个简单值的类型;一种大胆的方法是使用dynamic
,它将在运行时计算出:writer.Write((dynamic)obj); // not great, but should work
-
如果你的意图是写一个复杂的数据块(
class
/struct
等),那么你不应该使用BinaryWriter
-你应该使用序列化器。也许BinaryFormatter
(虽然有一些严重的扭结,使我不愿意推荐它)或protobuf-net,或类似的
BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create);
var obj = Convert.ChangeType(property.GetValue(objectToWrite, null), property.PropertyType);
writer.Write(obj);
尝试用obj
代替var