gpt4 book ai didi

protobuf-net - 在没有通用类的情况下调用 PrepareSerializer

转载 作者:行者123 更新时间:2023-12-04 04:48:16 28 4
gpt4 key购买 nike

我使用反射找到我项目中所有继承自 Packet.Base 的类

这些类中的每一个都应用了 ProtoBuf 属性。

我刚刚经历过Protobuf.net Exception - Timeout while inspecting metadata我的项目,并希望实现 PrepareSerializer 而不必通过并在其中添加所有不同的类类型。

有没有一种简单的方法可以让我动态地准备类,因为我有来自反射的类型而无需调用

ProtoBuf.Serializer.PrepareSerializer(Of Instruction)()
ProtoBuf.Serializer.PrepareSerializer(Of NoOperation)()

或添加一个

Public MustOverride Sub Prepare()

到基类再到每个类

Public Overrides Sub Prepare()
Serializer.PrepareSerializer(Of TimeSynchronise)()
End Sub

这是我正在使用的加载机制,一个非常简单的反射加载。

Public Class CompatiblePackets
Inherits Dictionary(Of Packet.PacketType, Base)

Public Sub New()
Dim theAssembly As Assembly = Assembly.GetExecutingAssembly
For Each t As Type In theAssembly.GetTypes
If t.BaseType Is GetType(Base) Then
Dim p As Base = CType(t.Assembly.CreateInstance(t.FullName), Base)
Me.Add(p.PacketTypeIndicator, p)
End Try
End If
Next
End Sub

public sub Prepare
ProtoBuf.Serializer.PrepareSerializer(t)()
end sub

最佳答案

是的,你可以在没有泛型的情况下调用它:

RuntimeTypeModel.Default[type].CompileInPlace();

哪里:

  • RuntimeTypeModel.Default 是默认类型模型,这是 Serializer.* 方法使用的(v2 支持并行独立类型模型)
  • [type] 索引器使用默认行为(属性)执行和隐式Add,从而完成大部分元数据分析
  • CompileInPlace() 对该类型进行 IL 优化

您也可以尝试稍微增加 RuntimeTypeModel.Default.MetadataTimeoutMilliseconds

关于protobuf-net - 在没有通用类的情况下调用 PrepareSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9833794/

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