Sharpify.Data
2.4.0
See the version list below for details.
dotnet add package Sharpify.Data --version 2.4.0
NuGet\Install-Package Sharpify.Data -Version 2.4.0
<PackageReference Include="Sharpify.Data" Version="2.4.0" />
<PackageVersion Include="Sharpify.Data" Version="2.4.0" />
<PackageReference Include="Sharpify.Data" />
paket add Sharpify.Data --version 2.4.0
#r "nuget: Sharpify.Data, 2.4.0"
#:package Sharpify.Data@2.4.0
#addin nuget:?package=Sharpify.Data&version=2.4.0
#tool nuget:?package=Sharpify.Data&version=2.4.0
CHANGELOG
v2.4.0
- Added an overload for
Removewhich takes in aFunc<string, bool> keySelector, this function is more optimized then using if you were to iterate yourself and call the oldRemoveas this one will execute serialization only once at the end, and only if removals actually happened (selector actually matched at least one key).- The new
Removemethod also has an overload that accepts astring? preFilteras well, which can be used to only check keys that start withpreFilter(thekeySelectordoesn't need to account for it, it will applied to a slice if thepreFilteris matched), if leftnullit will be ignored. - This addition was also propagated to both implementations of the
IDatabaseFilter<T>, i.eMemoryPackDatabaseFilter<T>andFlexibleDatabaseFilter<T>, both of which modify the incoming delegate to the use the filtered key, enabling simple delegate matches without relying on implementation details, they don't have the option to use apreFilteras they themselves use the statically generated type filters they create.
- The new
- To accommodate the
Removemethods,MemoryPackDatabaseFilter<T>andFlexibleDatabaseFilter<T>now create apublic static readonly string KeyFilterproperty, which is the prefix they append to the keys, this is used internally forRemovebut perhaps the could help if you need to inherit from these classes and override theRemovemethod.- Both of them also use
KeyFilterinternally to generate the filtered keys in a slightly more efficient way to before. - The
static readonlyfield that contained the generic type name was also removed as it was integrated intoKeyFilterat with no additional cost.
- Both of them also use
Reminder: Workaround for broken NativeAot support from MemoryPack
As of writing this, MemoryPack's NativeAot support is broken, for any type that isn't already in their cached types, the MemoryPackFormatterProvider uses reflection to get the formatter, which fails in NativeAot.
As a workaround, we need to add the formatters ourselves, to do this, take any 1 static entry point, that activates before the database is loaded, and add this:
// for every T type that relies on MemoryPack for serialization, and their inheritance hierarchy
// This includes types that implement IMemoryPackable (i.e types that are decorated with MemoryPackable)
MemoryPackFormatterProvider.Register<T>();
// If the type is a collection or dictionary use the other corresponding overloads:
MemoryPackFormatterProvider.RegisterCollection<TCollection, TElement>();
// or
MemoryPackFormatterProvider.RegisterDictionary<TDictionary, TKey, TValue>();
// and so on...
// for all overloads check peek the definition of MemoryPackFormatterProvider, or their Github Repo
Note: Make sure you don't create a new static constructor in those types, MemoryPack already creates those, you will need to find a different entry point.
With this the serializer should be able to bypass the part using reflection, and thus work even on NativeAot.
P.S. The base type of the Database is already registered the same way on its own static constructor.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net7.0
- MemoryPack (>= 1.21.0)
- Sharpify (>= 1.7.3)
-
net8.0
- MemoryPack (>= 1.21.0)
- Sharpify (>= 1.7.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 2.6.0 | 397 | 11/13/2024 | |
| 2.5.0 | 164 | 7/30/2024 | |
| 2.4.1 | 166 | 6/3/2024 | |
| 2.4.0 | 160 | 5/30/2024 | |
| 2.3.0 | 203 | 4/17/2024 | |
| 2.2.0 | 205 | 3/2/2024 | |
| 2.1.3 | 184 | 1/25/2024 | |
| 2.1.2 | 172 | 1/25/2024 | |
| 2.1.1 | 175 | 1/25/2024 | |
| 2.1.0 | 196 | 1/25/2024 | |
| 2.0.2 | 183 | 1/23/2024 | |
| 2.0.1 | 172 | 1/22/2024 | |
| 2.0.0 | 171 | 1/20/2024 | |
| 1.1.0 | 189 | 1/15/2024 | |
| 1.0.3 | 196 | 1/8/2024 | |
| 1.0.2 | 211 | 1/5/2024 | |
| 1.0.1 | 203 | 1/4/2024 | |
| 1.0.0 | 189 | 1/4/2024 |