SharpYaml is a .NET library that provides a YAML parser and serialization engine for .NET objects, compatible with CoreCLR.
NOTICE:
This project is no longer actively maintained since 2016, but it's still accepting Pull-Requests.
Small improvements and fixes are welcome, but big refactoring won't likely be.
Please, open an issue in case you are not sure about the changes you want to bring before working on a PR.
var serializer = new Serializer();
var text = serializer.Serialize(new { List = new List<int>() { 1, 2, 3 }, Name = "Hello", Value = "World!" });
Console.WriteLine(text);Output:
List:
- 1
- 2
- 3
Name: Hello
Value: World!
SharpYaml is a fork of YamlDotNet and is adding the following features:
- Supports for
.netstandard2.0 - Memory allocation and GC pressure improved
- Completely rewritten serialization/deserialization engine
- A single interface
IYamlSerializablefor implementing custom serializers, alongIYamlSerializableFactoryto allow dynamic creation of serializers. Registration can be done throughSerializerSettings.RegisterSerializerandSerializerSettings.RegisterSerializerFactory- Can inherit from
ScalarSerializerBaseto provide custom serialization to/from a Yaml scalar
- Can inherit from
- Supports for custom collection that contains user properties to serialize along the collection.
- Supports for Yaml 1.2 schemas
- A centralized type system through
ITypeDescriptorandIMemberDescriptor - Highly configurable serialization using
SerializerSettings(see usage)- Add supports to register custom attributes on external objects (objects that you can't modify) by using
SerializerSettings.Register(memberInfo, attribute) - Several options and settings:
EmitAlias,IndentLess,SortKeyForMapping,EmitJsonComptible,EmitCapacityForList,LimitPrimitiveFlowSequence,EmitDefaultValues - Add supports for overriding the Yaml style of serialization (block or flow) with
SerializerSettings.DefaultStyleandSerializerSettings.DynamicStyleFormat
- Add supports to register custom attributes on external objects (objects that you can't modify) by using
- Supports for registering an assembly when discovering types to deserialize through
SerializerSettings.RegisterAssembly - Supports a
IObjectSerializerBackendthat allows to hook a global rewriting for all YAML serialization types (scalar, sequence, mapping) when serializing/deserializing to/from a .NET type.
MIT