二进制写入(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)

var在这种情况下将解析为object,因为这是GetValue返回的。没有接受objectBinaryWriter.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