gpt4 book ai didi

c# - 没有可序列化属性的二进制序列化

转载 作者:太空狗 更新时间:2023-10-29 20:26:55 25 4
gpt4 key购买 nike

我想序列化我的对象并使用 BinaryFormatter 类。

public static byte[] BinarySerialize(IMessage message)
{
using (var stream = new MemoryStream())
{
var formatter = new BinaryFormatter();

formatter.Serialize(stream, message);

return stream.ToArray();
}
}

但是当我运行代码时,抛出异常。

SerializationException: Object is not marked as serializable.

我认为这个异常是由 BinaryFormatter 抛出的。

我不想将我的对象标记为[Serializable]。或者我的图书馆用户可能会忘记将他们自己的消息标记为 [Serializable]

有没有其他方法可以在不使用 [Serializable] 属性的情况下对我的对象进行二进制序列化?

最佳答案

由于无法在运行时添加 [Serializable] 属性,如果您想坚持使用 .Net 内置的序列化,则没有其他选择。

你可以

  1. 在 IMessage 中使用 ISerializable 接口(interface),以便用户必须在其实现中实现序列化
  2. 使用外部库,例如:http://sharpserializer.codeplex.com/顺便说一句,他们已经搬到了 GitHub。请参阅:https://github.com/polenter/SharpSerializer

    public static byte[] BinarySerialize(IMessage message)
    {
    using (var stream = new MemoryStream())
    {
    var serializer = new SharpSerializer(true);

    serializer.Serialize(message, stream );

    return stream.ToArray();
    }
    }
  3. 使用JSON序列化

关于c# - 没有可序列化属性的二进制序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39264293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com