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
IYamlSerializable
for implementing custom serializers, alongIYamlSerializableFactory
to allow dynamic creation of serializers. Registration can be done throughSerializerSettings.RegisterSerializer
andSerializerSettings.RegisterSerializerFactory
- Can inherit from
ScalarSerializerBase
to 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
ITypeDescriptor
andIMemberDescriptor
- 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.DefaultStyle
andSerializerSettings.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
IObjectSerializerBackend
that allows to hook a global rewriting for all YAML serialization types (scalar, sequence, mapping) when serializing/deserializing to/from a .NET type.
MIT