实例介绍
Hyperion是一款专为.NET框架开发的高性能多态序列化工具,目前处于BETA测试阶段(v0.9.14)。它采用Apache 2.0许可证授权。Hyperion的设计初衷是为了在分布式系统中,如服务总线或基于actor模型的系统中,安全地传递消息。
在基于消息的系统中,接收到不同类型的消息并对这些消息进行模式匹配是很常见的。如果消息没有携带足够的类型信息到接收方,那么消息可能就无法精确匹配系统期望的内容。例如,当使用基于Json的序列化器时,由于Json无法描述小数值的类型,因此数字1.2很可能被反序列化为double类型。而Hyperion通过为每个值编码一个清单——对于原始值是单字节前缀,对于复杂类型则是完全限定的程序集名称,从而解决了这一问题。
有时,某些对象可能无法以安全的方式进行序列化,因为这些对象在某种程度上是上下文相关的。Hyperion通过使用“代理”来解决这些问题,代理是一种将对象从绑定到上下文的表示形式转换回来的方式。这对于像Akka.NET这样的框架至关重要,我们需要能够在反序列化系统中解析活动的Actor引用。
为了安全原因,有时我们需要限制允许反序列化的类型。出于这个原因,您可以将实现ITypeFilter接口的类实例传递给SerializerOptions,或使用TypeFilterBuilder类构建Hyperion可以使用的TypeFilter,以在反序列化期间过滤掉任何可能的有害注入攻击。
【实例截图】
【核心代码】
文件清单
└── Hyperion-32ba7b584bf4171870925818253dac5dc9e3f041
├── build.cmd
├── build.fsx
├── build.ps1
├── build.sh
├── build-system
│ ├── azure-pipeline.template.yaml
│ ├── nightly-builds.yaml
│ ├── pr-validation.yaml
│ ├── README.md
│ ├── windows-pr-validation.yaml
│ └── windows-release.yaml
├── docs
│ ├── api
│ │ └── index.md
│ ├── articles
│ │ ├── index.md
│ │ └── toc.yml
│ ├── docfx.json
│ ├── images
│ │ └── icon.png
│ ├── index.md
│ └── toc.yml
├── Hyperion.sln
├── LICENSE
├── README.md
├── RELEASE_NOTES.md
└── src
├── common.props
├── Hyperion
│ ├── Attributes.cs
│ ├── ByteArrayKeyComparer.cs
│ ├── ByteArrayKey.cs
│ ├── Compilation
│ │ ├── Compiler.cs
│ │ ├── ExpressionEx.cs
│ │ ├── ICompiler.cs
│ │ ├── IlBuilder.cs
│ │ ├── IlCompilerContext.cs
│ │ ├── IlCompiler.cs
│ │ └── IlExpression.cs
│ ├── DefaultCodeGenerator.cs
│ ├── Delegates.cs
│ ├── DeserializeSession.cs
│ ├── Extensions
│ │ ├── ReflectionEx.cs
│ │ ├── StreamEx.cs
│ │ ├── StringEx.cs
│ │ └── TypeEx.cs
│ ├── Hyperion.csproj
│ ├── ICodeGenerator.cs
│ ├── Internal
│ │ └── Annotations.cs
│ ├── ITypeFilter.cs
│ ├── NoAllocBitConverter.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Serializer.cs
│ ├── SerializerFactories
│ │ ├── AggregateExceptionSerializerFactory.cs
│ │ ├── ArraySerializerFactory.cs
│ │ ├── ConsistentArraySerializerFactory.cs
│ │ ├── ConstructorInfoSerializerFactory.cs
│ │ ├── DefaultDictionarySerializerFactory.cs
│ │ ├── DelegateSerializerFactory.cs
│ │ ├── DictionarySerializerFactory.cs
│ │ ├── EnumerableSerializerFactory.cs
│ │ ├── ExceptionSerializerFactory.cs
│ │ ├── ExpandoObjectSerializerFactory.cs
│ │ ├── FieldInfoSerializerFactory.cs
│ │ ├── FromSurrogateSerializerFactory.cs
│ │ ├── FSharpListSerializerFactory.cs
│ │ ├── FSharpMapSerializerFactory.cs
│ │ ├── ImmutableCollectionsSerializerFactory.cs
│ │ ├── ISerializableSerializerFactory.cs
│ │ ├── MethodInfoSerializerFactory.cs
│ │ ├── MultipleDimensionalArraySerialzierFactory.cs
│ │ ├── PropertyInfoSerializerFactory.cs
│ │ ├── ToSurrogateSerializerFactory.cs
│ │ └── ValueSerializerFactory.cs
│ ├── SerializerOptions.cs
│ ├── SerializerSession.cs
│ ├── Surrogate.cs
│ ├── TypeFilterBuilder.cs
│ ├── TypeFilter.cs
│ └── ValueSerializers
│ ├── BoolSerializer.cs
│ ├── ByteArraySerializer.cs
│ ├── ByteSerializer.cs
│ ├── CharSerializer.cs
│ ├── ConsistentArraySerializer.cs
│ ├── DateTimeOffsetSerializer.cs
│ ├── DateTimeSerializer.cs
│ ├── DecimalSerializer.cs
│ ├── DoubleSerializer.cs
│ ├── FloatSerializer.cs
│ ├── FromSurrogateSerializer.cs
│ ├── GuidSerializer.cs
│ ├── Int16Serializer.cs
│ ├── Int32Serializer.cs
│ ├── Int64Serializer.cs
│ ├── KnownTypeObjectSerializer.cs
│ ├── NullSerializer.cs
│ ├── ObjectReferenceSerializer.cs
│ ├── ObjectSerializer.cs
│ ├── SByteSerializer.cs
│ ├── SessionAwareByteArrayRequiringValueSerializer.cs
│ ├── SessionAwareByteArrayRequiringValueSerializer.cs.orig
│ ├── SessionIgnorantValueSerializer.cs
│ ├── StringSerializer.cs
│ ├── SystemObjectSerializer.cs
│ ├── ToSurrogateSerializer.cs
│ ├── TypeSerializer.cs
│ ├── UInt16Serializer.cs
│ ├── UInt32Serializer.cs
│ ├── UInt64Serializer.cs
│ ├── UnsupportedTypeSerializer.cs
│ └── ValueSerializer.cs
├── Hyperion.Akka.Integration.Tests
│ ├── Hyperion.Akka.Integration.Tests.csproj
│ └── IntegrationSpec.cs
├── Hyperion.API.Tests
│ ├── CoreApiSpec.ApproveApi.approved.txt
│ ├── CoreAPISpec.cs
│ └── Hyperion.API.Tests.csproj
├── Hyperion.Benchmarks
│ ├── Hyperion.Benchmarks.csproj
│ ├── Program.cs
│ ├── Prolog.cs
│ ├── SerializeClassesBenchmark.cs
│ ├── SerializeCollectionsBenchmark.cs
│ ├── SerializeFSharpDataTypesBenchmark.cs
│ ├── SerializeImmutableCollectionsBenchmark.cs
│ ├── SerializePrimitivesBenchmark.cs
│ ├── SerializeStructsBenchmark.cs
│ └── TypeRejectionBenchmark.cs
├── Hyperion.Tests
│ ├── AttributeTests.cs
│ ├── Bugs.cs
│ ├── CollectionTests.cs
│ ├── CrossFrameworkSerializationTests.cs
│ ├── CustomObjectTests.cs
│ ├── CyclicTests.cs
│ ├── DelegateTests.cs
│ ├── EncapsulationTests.cs
│ ├── ExpressionTests.cs
│ ├── FSharpTests.cs
│ ├── Generator
│ │ ├── CrossFrameworkClass.cs
│ │ ├── CrossFrameworkEnum.cs
│ │ ├── CrossFrameworkInitializer.cs
│ │ ├── CrossFrameworkStruct.cs
│ │ └── Program.cs
│ ├── GenericDictionarySerializerTests.cs
│ ├── Hyperion.Tests.csproj
│ ├── IlCompilerTests.cs
│ ├── ImmutableCollectionsTests.cs
│ ├── IncompleteStreamTests.cs
│ ├── InterfaceTests.cs
│ ├── ISerializableTests.cs
│ ├── lib
│ │ ├── Microsoft.VisualStudio.Text.UI.Wpf.dll
│ │ ├── PresentationFramework.dll
│ │ ├── System.Activities.Presentation.dll
│ │ ├── System.Drawing.Design.dll
│ │ ├── System.Drawing.dll
│ │ ├── System.IdentityModel.dll
│ │ ├── System.Web.dll
│ │ ├── System.Web.Mobile.dll
│ │ └── System.Windows.Forms.dll
│ ├── PartialStreamTests.cs
│ ├── PrimitivesTests.cs
│ ├── Properties
│ │ └── launchSettings.json
│ ├── Something.cs
│ ├── SurrogateTests.cs
│ ├── TestBase.cs
│ ├── testfiles
│ │ ├── mixed_test_file_.netcoreappversionv2.0.tf
│ │ ├── mixed_test_file_.netcoreappversionv2.1.tf
│ │ ├── mixed_test_file_.netcoreappversionv2.2.tf
│ │ ├── mixed_test_file_.netcoreappversionv3.0.tf
│ │ ├── mixed_test_file_.netcoreappversionv3.1.tf
│ │ ├── mixed_test_file_.netcoreappversionv5.0.tf
│ │ ├── mixed_test_file_.netframeworkversionv4.6.1.tf
│ │ ├── test_file_.netcoreappversionv2.0.tf
│ │ ├── test_file_.netcoreappversionv2.1.tf
│ │ ├── test_file_.netcoreappversionv2.2.tf
│ │ ├── test_file_.netcoreappversionv3.0.tf
│ │ ├── test_file_.netcoreappversionv3.1.tf
│ │ ├── test_file_.netcoreappversionv5.0.tf
│ │ └── test_file_.netframeworkversionv4.6.1.tf
│ ├── UnsafeDeserializationExclusionTests.cs
│ └── UnsupportedTypeSerializerTests.cs
├── Hyperion.Tests.FSharpData
│ ├── Hyperion.Tests.FSharpData.fsproj
│ └── Types.fs
├── xunit.runner.json
└── xunitSettings.props
23 directories, 176 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论