You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何调用ObjectToByteArray将结构体转字节数组?代码是否正确?

如何使用ObjectToByteArray将结构体转换为字节数组 & 代码检查

嘿,我来帮你梳理下这个问题~首先聊聊ObjectToByteArray方法的常见使用逻辑:这类方法大多基于.NET的对象序列化机制实现(最典型的是用BinaryFormatter,不过要注意这个类在现代.NET版本里已被标记为不安全,不推荐用于生产环境,但咱们先围绕你的需求展开)。它的核心作用就是把可序列化的对象(比如你的结构体)转换成字节数组,反过来也能把字节数组还原成对象。

接下来看你的代码,先指出几个关键问题,再给你修正后的版本:

你的代码里的核心问题

  1. 结构体缺少序列化标记:如果ObjectToByteArray依赖标准序列化(比如BinaryFormatter),你的Convertor结构体必须加上[Serializable]特性,否则序列化时会直接抛出异常。
  2. ConvertToArray方法逻辑错误:你在方法里新建了一个空的Convertor实例Result,但实际上你应该序列化当前结构体实例(也就是this),而不是一个空对象。

修正后的完整代码示例

// 必须添加Serializable特性,确保结构体可以被序列化
[Serializable]
public struct Convertor 
{ 
    public string License { get; set; } 
    public int Software { get; set; } 
    public int StartDate { get; set; } 
    public int EndDate { get; set; } 
    public byte Count { get; set; } 
    public int[] ActionCode { get; set; } 

    public byte[] ConvertToArray() 
    {
        // 调用ObjectToByteArray,传入当前实例this
        return ObjectToByteArray(this);
    }

    // 假设你的ObjectToByteArray是类似这样实现的(如果还没实现,参考这个)
    private static byte[] ObjectToByteArray(object obj)
    {
        if (obj == null)
            return null;
        
        using (var ms = new MemoryStream())
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(ms, obj);
            return ms.ToArray();
        }
    }
}

额外注意事项

  • 关于BinaryFormatter的安全性:刚才提到了,BinaryFormatter存在严重安全漏洞,如果你是在.NET Core/.NET 5+环境下开发,更推荐使用System.Text.Json、MessagePack或者Protobuf这类更安全、高效的序列化库。比如用System.Text.Json的话,代码可以改成这样:
    public byte[] ConvertToArray()
    {
        return System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(this);
    }
    
    这种方式不需要加[Serializable]特性,而且更安全。
  • 字段的可序列化性:你的结构体里的字段类型(string、int、byte、int[])都是默认支持序列化的,所以只要标记了[Serializable](用BinaryFormatter的话),就不会有问题。
  • 结构体是值类型:要注意结构体是值类型,传递时会复制,但在这个场景里直接用this序列化是完全没问题的。

内容的提问来源于stack exchange,提问作者Mishaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:01:21