c# - 二进制写入(var/object)

标签 c# casting binary var

在我的程序中,我将在运行时获得一个 var 对象,我想将其写入二进制文件,但我无法写入 var 变量通过使用BinaryWriter。它给出了一个编译错误,无法从“object”转换为“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 返回的内容。不存在接受 objectBinaryWriter.Write 重载。接下来您想要什么取决于以下几件事:

  • 如果您的目的是编写一个非常简单的值(单个 boolint 等 - 由 BinaryWriter 支持的内容) ) 到一个文件,那么您将必须打开该简单值的类型;一个厚颜无耻的方法是使用dynamic,它会在运行时解决这个问题:

    writer.Write((dynamic)obj); // not great, but should work
    
  • 如果您的目的是写入一段复杂的数据(class/struct 等),那么您不应该使用 BinaryWriter - 您应该使用序列化器。也许是 BinaryFormatter (尽管它有一些严重的问题,让我不愿意推荐它)或 protobuf-net,或类似的

关于c# - 二进制写入(var/object),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16689746/

相关文章:

c++ - 二进制到格雷码,反之亦然

c# - 在 C# 中将 short[] 数组写入文件的最佳方法是什么?

c++ - 何时以及如何允许转换为 char 指针?

c# - 如何在删除/从字符串中修改字符串后获得所需的输出

object - 将对象转换为 TypeScript 中的接口(interface)

java - 查找 ArrayList<Object> 中的特定类型(即 Object = String 等)

static - 帮助为 wkhtmltopdf 安装静态二进制文件

hadoop - 使用hadoop文件系统org.apache.hadoop.fs.FileSystem写二进制文件

c# - 使用来自 NUnit 的 Facebook C# SDK

C# - 当每个 'row' 有多个值时对列表进行排序?