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

C#中BinaryFormatter序列化的替代方案求推荐

替代BinaryFormatter的字符串序列化方案

你之前的代码用BinaryFormatter将字符串序列化到MemoryStream,但BinaryFormatter存在安全风险且已被标记为过时,以下是几种可靠的替代方案,均能实现返回MemoryStream的需求:

方案一:直接使用UTF8编码转换(最简洁高效)

因为字符串本质是文本,直接将其编码为字节数组写入MemoryStream是最直接的方式,无需额外序列化框架:

private MemoryStream serialize_to_stream(string str)
{
    try
    {
        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(str);
        return new MemoryStream(bytes);
    }
    catch
    {
        return null;
    }
}

优点:无额外依赖、性能极高、代码简单;缺点:仅适用于纯字符串场景,无法直接扩展到复杂对象

方案二:使用System.Text.Json序列化

如果后续可能需要扩展到复杂对象,System.Text.Json是官方推荐的序列化库,也能轻松处理字符串:

private MemoryStream serialize_to_stream(string str)
{
    try
    {
        MemoryStream stream = new MemoryStream();
        System.Text.Json.JsonSerializer.Serialize(stream, str);
        stream.Position = 0; // 重置流位置,方便后续读取
        return stream;
    }
    catch
    {
        return null;
    }
}

优点:官方维护、支持复杂对象、跨平台;缺点:相比直接编码,性能略低(但字符串场景差异可忽略)

方案三:使用protobuf-net进行二进制序列化

如果需要更紧凑的二进制格式,protobuf-net是轻量级的二进制序列化库,适合对体积敏感的场景:
首先需要安装NuGet包protobuf-net,然后实现代码:

private MemoryStream serialize_to_stream(string str)
{
    try
    {
        MemoryStream stream = new MemoryStream();
        ProtoBuf.Serializer.Serialize(stream, str);
        stream.Position = 0;
        return stream;
    }
    catch
    {
        return null;
    }
}

优点:二进制体积小、序列化速度快;缺点:需要引入第三方库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:10:58