Ceras v4.0 Release Notes

Release Date: 2019-02-27 // about 5 years ago
  • Major Changes

    • 0๏ธโƒฃ Public properties are now also serialized by default!
      • The default value for config.DefaultTargets has changed from PublicFields to AllPublic
    • TypeConfig:
      • Fluent syntax: config.ConfigType<MyClass>() / .ConfigType(type)
      • Easily config types without attributes
      • config.OnConfigNewType to handle new types (like generics, or also private types)
      • Set a custom IFormatter<> or IFormatterResolver
      • Specify how to construct a class
        • [CerasConstructorAttribute] or .ConfigType<Thing>().ConstructBy(() => new Thing(x, y));
        • Any function can be used! (Many Examples)
        • Automatically maps fields/props to arguments by matching the names
        • You can also map arguments yourself config.ConfigType<MyClass>().MapParameters(...);
    • Debug Report
      • For when you're not sure if/why some field/prop got included or not
      • Use ceras.GenerateSerializationDebugReport(type) to get a report explaining how Ceras will handle the given type, contains information about the used formatter, serialized members, and reasons for inclusion/exclusion.
    • Support for Unity IL2CPP and other AoT platforms
    • ๐Ÿ‘ Full built-in support for ExpressionTrees!
      • Ceras can fully serialize and deserialize everything in System.Linq.Expressions now!
    • ๐Ÿ‘ Built-in support for:
      • System.Collections.Immutable.* through an extension nuget package
      • Stack<>, Queue<>
      • System.Drawing.Bitmap and Color
      • BigInteger BitArray, DateTimeOffset, Uri
    • Static Serialization!
      • Easy API ceras.Advanced.SerializeStatic(typeof(YourClassHere));
      • TypeConfig works with static as well: config.ConfigStaticType(typeof(StaticClassTest))
      • Doesn't have to be a static class, you can also configure the static fields of a normal class
      • API will be extended in future versions (since it's still a "preview feature")

    โž• Additional Changes

    • SimpleTypeBinder.CustomSearchAssemblies can now be used to specify additional assemblies that should be searched to resolve types
    • You can set CerasBufferPool.Pool to customize how Ceras allocates and discards serialization buffers
    • ๐Ÿ‘ Ceras now uses "capacity-constructors" for all supported types (like new List<int>(knownSize))
    • Attributes for your own IFormatter<> implementations: [CerasInject] and [CerasNoInject]
    • GetFormatterResolver<>() to obtain one of Ceras' internal resolvers, can be used to force usage of a specific resolver to handle some type.
    • ๐Ÿ†• New super-fast formatter: ReinterpretFormatter<T>, used by default for all blittable types
    • โž• Adding a type multiple times to KnownTypes will now tell you which types appear multiple times
    • VerifySizes setting for VersionTolerance, and many general improvements to version tolerance
    • Option to serialize instance delegates
    • EnumAsStringFormatter
    • [Ignore] renamed to [Exclude]


    • ๐Ÿ“ฆ NuGet
    • ๐Ÿ— AppVeyor CI - .zip for each platform (.dll, .pdb, and .xml)

    Any feedback is always greatly appreciated! ๐Ÿ˜„