【问题标题】:Using Protobuf-net .proto schema in Angular在 Angular 中使用 Protobuf-net .proto 模式
【发布时间】:2019-05-09 09:30:55
【问题描述】:

我有一个现有的 Web API 项目,在运行一些测试后,我想开始实现 protobuf。使用Serializer.GetProto<>() 方法,我得到了以下数据(仅显示开头):

syntax = "proto2";
package MyProject.Models;
import "protobuf-net/bcl.proto"; // schema for protobuf-net's handling of core .NET types

message AssemblyComponentDetailsModel {
   optional .bcl.Guid ID = 1 [default = 00000000-0000-0000-0000-000000000000];
   optional string AssemblyName = 2;
   optional string ReferenceNumber = 3;
   optional .bcl.Guid TypeID = 4 [default = 00000000-0000-0000-0000-000000000000];
   optional .bcl.Guid CategoryID = 5 [default = 00000000-0000-0000-0000-000000000000];
   optional string Symbol = 6;
   repeated ComponentDetailsModel ComponentDetails = 7;
   optional .bcl.Decimal MsrpTotal = 8 [default = 0];
}

该项目的前端使用 Angular 7,我正在使用此页面上的信息来实现它:https://medium.com/francesco-pongetti/using-protocol-buffers-in-a-node-js-angular-web-application-fba17df8ab51

我的问题是,原始文件具有导入语句 import "protobuf-net/bcl.proto",并且正在使用该文件中的项目(例如 optional .bcl.Guid)。这会导致 Angular 中的反序列化问题吗?如果是这样,解决此问题的最简单方法是什么?项目中有很多类,我试图避免手动编写所有 .proto 文件。

非常感谢任何指导/建议,因为这是我第一次在实际项目中使用 protobuf。

提前谢谢你。

【问题讨论】:

    标签: angular asp.net-web-api protobuf-net


    【解决方案1】:

    理论上它应该可以正常工作 - bcl.proto is a perfectly normal .proto schema - 但是,bcl.proto 中的类型基本上描述了我如何将 .NET 类型破解为 protobuf。在可能的情况下,我建议尽可能避免这种情况 - 例如,bcl.proto work 中的 DateTimeTimeSpan 但如果您不在 .NET 中,使用起来会非常尴尬,但是protobuf-net 允许您使用后来添加的 Google 类型:DurationTimestamp。 protobuf-net 不默认这些的原因是 Google 添加它们的时间比 protobuf-net 的支持要晚得多。要使用这个选项(在它起作用的类型上,这是有限的):使用:

    [ProtoMember(n, DataFormat = DataFormat.WellKnown)]
    

    在属性/字段上。 GetProto/GetSchema 将自动发出正确的 import 语句以匹配您生成的架构。

    但是,对于Guiddecimal,我想说选项不太清楚。对于Guid,如果可能的话,我很想使用string - 现实情况是guid 在二进制 表示中有很多歧义,使用简单的string 是最实用的选项。 decimal 对非 .NET 平台非常不友好:如果可能,请考虑使用 double - 或者如果您需要避免使用浮点:通过手动缩放整数使用定点,或再次:使用string

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多