在 .net core ProtoBuf 中,序列化器(Serializer)在哪里?

5
我希望您能够翻译以下内容:我在Dotner Core 3.1中使用Protobuf,并在我的项目中安装了Package。但是,当我编写下面的代码以序列化请求对象时:
 public static byte[] ProtoSerialize<T>(T record) where T : class
    {
        try
        {
            using (var stream = new MemoryStream())
            {
                Serializer.Serialize(stream, record);
                return stream.ToArray();
            }
        }
        catch
        {
            throw;
        }
    }

Visual Studio无法找到相关的命名空间,并出现了找不到Serializer的错误。

当前上下文中不存在名称为“Serializer”的内容。

我在.Net上进行测试并安装了相关包,可以正常工作,但在.Net Core中出现了错误。相关的命名空间是什么?问题出在哪里?


你应该使用这个包 - https://www.nuget.org/packages/protobuf-net/ 它支持 .NET Core。实际上,这两个包都有相同的 git 仓库,所以不确定发生了什么,但是这个包可以正常工作。 - Nikita Chayka
@Nikita,从同一个仓库获取多个构件是非常普遍的。 - Marc Gravell
@MarcGravell 是的,我同意,只是在我写这条评论时,我还没有考虑到那个问题 :) 实际上我后来写了一个答案,但你已经写好了。 - Nikita Chayka
1个回答

10

基本上,安装protobuf-net包。

protobuf-net.Core不是“在.NET Core上的protobuf-net”,而是“protobuf-net的核心部分”。无论您使用的是.NET Framework、.NET Core、.NET 5+还是其他某个平台(在.NET Standard上),protobuf-net都会依赖于protobuf-net.Core

  • protobuf-net包含所有运行时发出逻辑,以及Serializer类。
  • protobuf-net.Core包含主要的读写逻辑。

有些情况下,您可能不需要运行时发出部分,但在您的情况下:您需要-所以只需将软件包依赖项更改为protobuf-net即可。

目标平台的问题由软件包管理器处理-您不需要担心。它将为您的平台安装正确的二进制文件。


1
从文档中看不出来。我可能也犯了同样的错误。 - Robert Harvey
@RobertHarvey 我的意思是,我们甚至没有链接或提到protobuf-net.Core,在安装说明中我们只提到了protobuf-net;我不确定我还能做什么,但我愿意听取建议。 - Marc Gravell
OP可能在nuget.org上找到了这个包,看到它是核心版本,然后安装了它。 - Robert Harvey
@MarcGravell 谢谢您的回答,它的名称确实有些误导,让我花费了几个小时 :( 如果您没有回答,我可能需要更多时间。如果可能的话,请在git存储库中添加一个注释来说明要点,无论如何感谢您。 - pejman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接