没有注释的Protobuf-net序列化
我看了看 this 在我不需要保持向后兼容性的情况下,我必须有一个解决方案,而不必用Protobuf-net所需的属性装饰数十个课程.因此,我尝试使用RuntimeTypeModel.Default.InferTagFromNameDefault = true;,但是我可能无法正确使用它,因为序列化器呼叫仍然抛出一个例外,要求合同.这是我的快速测试,我在做什么错? public enum CompanyTypes { None, Small, Big, Enterprise, Startup } public class BaseUser { public string SSN { get; set; } } public class User : BaseUser { public string FirstName { get; set; } public string LastName { get; set; } public
0 2024-02-26
编程技术问答社区
尝试使用protobuf-net序列化System.Numerics.Quaternion
背景信息 i有一个.NET标准2.0类库,该库使用ProtoBuf-net.grpc的代码第一种方法来定义GRPC服务.在此定义中,我有定义不同数据结构的类,我们用来记录传感器数据并使用Protobuf-net序列化.我的程序正在摄入服务器的数十万个大对象/s(很快将扩展到数百万美元),并旨在用于嵌入式环境中. 问题 在下面的班级中,我想将作为成员a system.numerics.quaterion.我似乎无法序列化.使用静态构造函数,runtimetypemodel会引发异常,因为在执行静态构造函数时,已经创建了四个模型.因为这是一个类库,我拼命希望避免使用GRPC服务在每个不同程序中调用RunTimetypeModel.我希望找到一种序列化system.numerics.quaternion的方法. 我尝试将此静态构造函数运行时定义放置在类层次结构的最高级别,但无济于事.例外仍然被抛出. [ProtoContract] public class
4 2024-01-08
编程技术问答社区
Protobuf-net缺少对System.Private.ServiceModel的依赖。
我们有一个项目,该项目使用Protobuf-net来序列化和应对我们的Protobuf消息.它在Windows上构建良好,但是在我们的Linux构建环境上,我们似乎最终缺少依赖性. 当dotnet core 2.1服务运行时,我们会发现一个错误: 应用程序依赖项中指定的一个组件表现出来 (xxxx.deps.json)找不到: 软件包:'System.Private.ServiceModel',版本:'4.5.3'路径: 'runtimes/unix/lib/netStandard2.0/system.private.servicemodel.dll' 未定义 如何最好地解决这个问题? 解决方案 当前的解决方法就是简单地将此库复制到项目构建事件的所需位置
4 2024-01-08
编程技术问答社区
我怎样才能将.NET框架中的gRPC客户端与安全的.NET核心服务器连接起来?
我在.NET Core Server上使用Protobuf-net.grpc,并尝试从.NET框架(4.7.2.)GRPC客户端进行呼叫.一个完整的示例在这里: https://github.com/github.com/angelagyang/grpcprotobufotobufectample 这是我客户的片段: var channelCreds = new SslCredentials(GetRootCertificates()); var channel = new Channel("localhost", 5001, channelCreds); var greeter = channel.CreateGrpcService(); 使用此配置,我在调用服务器时会得到错误StatusCode="Unknown", Detail="Stream removed"....如果我在服务器上设置ClientCertificateMode =
6 2024-01-08
编程技术问答社区
如何配置protobuf-net'的RuntimeModel.Default以支持序列化/反序列化SessionSecurityToken?
二进制形式器能够简单地处理序列化: private byte[] TokenToBytes(SessionSecurityToken token) { if (token == null) { return null; } using (var memoryStream = new MemoryStream()) { var binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(memoryStream, token); return memoryStream.ToArray(); } } 当我尝试用Protobuf-net替换二进制形式时: using (var memoryStream = new MemoryStream()) { Serializer.Seriali
0 2024-01-08
编程技术问答社区
是否可以使用协议缓冲区来序列化System.Object对象的列表?
我有各种数据类型的对象列表(DateTime,INT,DECIMAL,String). List myObjects = new List(); myObjects.Add(3); myObjects.Add(3.9m); myObjects.Add(DateTime.Now); myObjects.Add("HELLO"); 我能够使用Protobuf-net序列化此列表,但是避免序列化始终引发例外:"其他信息:类型不是预期,并且无法推断合同:System.Object". using (var ms = new MemoryStream()) { Serializer.Serialize(ms, list2); var bytes = ms.ToArray(); ms.Position = 0; var clone = Serializer.Deserialize(typeof(List)
4 2024-01-08
编程技术问答社区
强制protobuf-net忽略IEnumerable/ICollection接口
如何获得Protobuf-net的V2来忽略我的班级实现Icollection,Ienumerable等的事实? 在这种特定情况下,我只希望我标记为[protomember]的字段被序列化. 我目前正在使用Protobuf-Net V1转换为使用V2.我有一个特定的结构,该结构现在由于变化而错误地序列化.看起来如下: [ProtoContract] public class FileTree : ICollection, IEnumerable, IEnumerable, INotifyCollectionChanged, INotifyPropertyChanged { private FileTreeNode _Root; [ProtoMember (1)] public FileTreeNode Root { get { return _Root; } set {
4 2024-01-07
编程技术问答社区
protobuf和List<object>-如何序列化/反序列化?
我有一个List,其中包含不同类型的对象,例如整数,字符串和自定义类型.所有自定义类型都是原始的调整. 我现在想做的是用protobuf.net序列化/应对此列表.到目前为止,我怀疑我必须明确声明每种类型,不幸的是,这些混合列表构造是不可能的.因为二进制福明士没有问题要做这些事情,所以我希望我错过了一些东西,您可以帮助我. 所以我的问题是如何处理Protobuf.net中的对象. 解决方案 (披露:我是Protobuf-net的作者) BinaryFormatter是基于元数据的序列化器;即,它发送.NET类型的信息有关每个对象序列化的信息. Protobuf-net是基于合同的序列化器(二进制等效的XmlSerializer/DataContractSerializer,它也会拒绝这一点). 没有当前运输任意对象的机制,因为另一端不会知道您要发送的内容 ;但是,如果您要发送的不同的对象类型的已知集,可能会有选项.管道中也有工作以允许运行时扩展的模式(
0 2024-01-07
编程技术问答社区
Unity3D中的自定义protobuf-net RuntimeTypeModel-无法加载文件或汇编
我正在尝试在Unity3d中构建一个自定义的Protobuf-net runtimetypemodel 3D: private static RuntimeTypeModel GetModel() { RuntimeTypeModel typeModel = TypeModel.Create(); foreach (var t in GetTypes(CompilationPipeline.GetAssemblies())) { var contract = t.GetCustomAttributes(typeof(ProtoContractAttribute), false); if (contract.Length > 0) { typeModel.Add(t, true); //add unity types typeModel.
4 2024-01-07
编程技术问答社区
Protobuf数据序列化器
此数据级数非常适合性能.但是我一直陷入具有system的数据类型的dataColumns.对象导致序列化器抛出异常:不能序列化'system.Object'的数据列. 有什么方法可以解决吗? 解决方案 ProtoBuf格式旨在适合数据可预测的情况,并且不太适合"对象"方案,但是,根据数据布局,一些可能是可能的: 如果"对象"数据是某种嵌套的消息,则可以将成员标记为" dynamictype = true",作为protomemberattribute装饰的一部分;然后,其中包括一些元数据,但作为Protobuf-net特异性扩展.在系统之间不会很便携 如果"对象"数据确实是少数已知类型之一,通常是int/datetime/float等,则有一些用来表示的方法(非传播基本类型,多个特定的T子类型) .同样,这不是平台之间的便携式 我可以说明如果我更多地了解模型. 其他解决方案 来自 Protobuf-net入门页面/p> 与XMLSerialize
2 2024-01-07
编程技术问答社区
最琐碎的protobuf-net例子需要帮助
观察以下琐碎的代码: [ProtoContract] public class B { [ProtoMember(1)] public int Y; } [ProtoContract] public class C { [ProtoMember(1)] public int Y; } class Program { static void Main() { var b = new B { Y = 2 }; var c = new C { Y = 4 }; using (var ms = new MemoryStream()) { Serializer.Serialize(ms, b); Serializer.Serialize(ms, c); ms.Position = 0; var b2 = S
0 2024-01-07
编程技术问答社区
Protobuf-net零/空列表和引用相等
如何在下面的示例中配置Protobuf-net Typemodel以通过3个单元测试? Protobuf版本为V2 R470. 我已经简要介绍了SVN树中的列表测试,但无法发现Protobuf-Net SVN中的Null与空的空测试之间的区别. using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; using ProtoBuf; using ProtoBuf.Meta; namespace ProtoCollections { [TestFixture] public class CollectionTests { [Test] public void TestEmptyList() { var model = TypeModel.Cre
0 2024-01-06
编程技术问答社区
在反序列化过程中获得'一个被引用跟踪的对象改变了引用'异常
这个问题与这个问题有关: https://stackoverflow.com/questions/7906356/how-to-solve-aveld-a-a-a-reference-tracked-bracked-object-changed-changed-reference-deres-deserialializat 由于上述帖子已经关闭,因此我创建了一个新的,其中包含用于重现问题和异常堆栈跟踪的测试代码. 这里要做什么,为什么要错误?同样,我还不清楚Protoinclude的标签.如果标签等于备忘录,则我会得到有关重复字段编号的例外.因此,我通常将其设置为Max(ProtoMember标签) + 1.这是工具期望的吗? 我运行了此示例,并使用SVN的最新代码(今天下载). 谢谢 [ProtoContract] [ProtoInclude(6, typeof(B))] public class A { [ProtoMember(1)] publ
6 2024-01-06
编程技术问答社区
Protobuf-net不会从Protobuf.js中反序列化数据
使用WebSocket使用ProtoBuf进行Web客户端和服务器(C#)之间的通信.在客户端上,DE/序列化是通过 protobuf.js 和在服务器上,在服务器上,使用Protobuf-net. 问题是,当将聚合与抽象类一起使用时,Protobuf-net无法估算Protobuf.js. 发送的数据. 这是堆栈跟踪: ProtoException: No parameterless constructor found for Base. at ProtoBuf.Meta.TypeModel.ThrowCannotCreateInstance(Type type) na c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 1397 at proto_6(Object , ProtoReader ) at ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Ser
4 2024-01-06
编程技术问答社区
用继承的方式进行协议缓冲区序列化。衍生的类是空的
我遇到了奇怪的问题.阅读很多后,我尝试在应用程序中部署Protobuf-net.类以简单的继承结合.可能是成功的序列化之后,我试图列出列表,但是Protobuf仅填充基类! 这里有一些代码: 序列化函数 private static void serialize(T obj) where T: Log { using (var fileStream = new FileStream(fileName, FileMode.Append)) { Serializer.SerializeWithLengthPrefix(fileStream, obj, PrefixStyle.Base128, SerializeTypesDictionary.First(x => x.Value == obj.GetType()).Key); }
0 2024-01-06
编程技术问答社区
使用协议缓冲区(.NET)序列化hashtable
我正在尝试使用Protobuf-net v2序列化/估算我的自定义类. [ProtoContract] public class MyClass { [ProtoMember(1)] public Hashtable MyHashTable { get; set; } } 当我调用Serializer.Serialize(...)异常时出现: 未定义用于类型的序列化器:system.collections.hashtable 我尝试修改: [ProtoContract] public class MyClass { [ProtoMember(1, DynamicType = true)] public Hashtable MyHashTable { get; set; } } 但是我还有另一个例外: 类型不是预期的,也不能推断合同:syst
0 2024-01-06
编程技术问答社区
无法解析类型。System.String, System.Private.CoreLib, Version 4.0.0.0-Asp.net Core (.net core 2.1) server, .NET 4.6.1 Client
我已经用.NET 4.6.1使用WCF服务器的数据写了一个旧的客户端应用程序. 我正在尝试用ASP.NET Core应用程序和ProtoBuf Serialization替换WCF服务器. 我正在使用库: core webapi form 服务器中的服务器 在客户端尝试以下返回的内容: var resultData = ProtoBuf.Serializer.Deserialize(response.Content.ReadAsStreamAsync().Result); 但是我在Protobuf库中遇到了错误: 无法解析类型:System.String,System.private.Corelib,版本= 4.0.0.0,culture =中性,publicKeyToken = 7cec85d7bea7798e(您可以使用typemodel.dynamictect.dynamictypempting evertting事
0 2024-01-06
编程技术问答社区
是否可以为Silverlight和.NET创建一个protobuf-net序列化程序集?
我想知道是否有类似于Protobuf-net的工具... 解决方案 我尚未在该区域完成工具,但是请注意,RunTimetypeModel具有一个compile()方法,该方法采用路径和类型名称;这是您想要的方法.我建议从"完整" .NET控制台应用程序中尝试此操作 为了生成ELL,然后参考SL(也引用 sl Protobuf-net dll的构建). 您可能会收到有关引用的IDE警告,但是从内存中可以起作用.长期我怀疑我需要切换到IKVM发射(要明确靶向SL),并且无论哪种方式,我都需要自动构建一个EXE来自动为您执行此操作(大概是使用某些模式来找到一种方法通过代码生成runtimetypemodel). 具有该参考后,您可以在生成时使用您命名的模型; new您走了. 请注意,使用此方法时,您不能针对私人成员序列化 - 运行时将不允许. 其他解决方案 不确定我是否正确地提出了问题,但是我们使用 this 当我们提供proto文件 时,它会为我们创建CS
2 2024-01-06
编程技术问答社区
POCO(去)序列化如何在protobuf-net中工作?
是否可以使用ProtoBuf-Net属性也不明确地将类型序列化poco类型? 解决方案 目前 - 简而言之,没有.它需要对您打算如何操作的基本基本了解.我想也许我可以添加一些东西让您指定完全未经修饰类型的默认策略(不是DataContract,ProtoContract>或XmlType),但那里是最合适的选项将是"所有公共成员"(很像XmlSerializer). 我不想鼓励这样做的原因是它很脆弱.由于如何定义Protobuf规范,您所得到的只是字段数.说"好的,按字母顺序订购并使用其位置"很容易,但是如果您想更改类型,那就不安全了.让我们面对现实吧,我们都这样做.您会惊讶于我添加AardvarkCount属性的频率,这与字母顺序混乱. 因此,我不想让人们轻松地使人们进入风险数据完整性的位置.因为我不喜欢有人对我大喊.如果有全局默认策略,则在不实现的情况下很容易使用该策略,这是您开始陷入麻烦的时候. 我确实打算使以每种方式选择这些策略变得更加容易(所有代码都存
6 2024-01-06
编程技术问答社区
protobuf.net不能序列化为零
看来有一个编码问题,用于0 AS INT64.其他值作为int64 ok. [ProtoMember(3)] private readonly Int64 _intValue 被选为int64.minvalue 有什么想法吗? 我确认错误.如果_val == 0 ,此类将无法正确序列化. [protocontract] class VerySimple { [ProtoMember(1)] private readonly Int64 _val = Int64.MinValue; public VerySimple(long val) { _val = val; } public long Val { get { return _val; } } public VerySimple() { } } 此测试
2 2024-01-06
编程技术问答社区