Sunday, October 8, 2017

Jsonics 0.2.0-alpha Released

Jsonics 0.2.0-alpha Release

Jsonics 0.2.0-alpha contains a bunch of new features and gets us a lot closer to being ready for our first release.

New Features

The following new features are present in Jsonics 0.2.0-alpha

Ignore Support

.net properties and fields can be excluded from Json serialisation or deserialisation using the new Ignore attribute. Simply decorate the property with the Ignore attribute as follows:
public Person
{
    [Ignore]
    public int Age
    {
        get;
        set;
    }
}

Property Name Support

.net properties and fields can now have different names from their json counterparts to achieve this use the new Name attribute as follows:
public Person
{
    [Name("experience"]
    public int Age
    {
        get;
        set;
    }
}

.net Standard 2.0

Jsonics has been moved to .net Standard 2.0. This allows for a much broader api space and will be supported everywhere .net is.

.net Field support

Jsonics now supports .net fields as well as .net properties.
public Person
{
    public int Age;
}

Char support

Char support was missing in the last release and has now been added.

Decimal support

Decimal support was missing in the last release and has now been added.

Nuget Changes

The Jsonics.StrongName packages has been unlisted and will not get any further updates. The Jsonics package is now StrongNamed. However the assembly version will be frozen to the major version in order to remove the need for Binding redirects. The File Version and Package version will now follow SemVer 2.0 rules. It was necessary to remove the Jsonics.StrongName package to avoid the situation where two libraries have a dependency on on Jsonics one using the StrongName version and one using the standard version.

Bug Fixes

  • Fixed support from primitive list and array types other than int and string

Whats Next?

The road to 1.0 will continue with the addition of the following features which will be included in the 0.3 release:
  • Custom converter support
  • IList support

How do I get it?

Jsonics is available on Nuget in here

The code is available on github here under the MIT license.

Jsonics is currently in alpha quality and should not be used for production code. However feel free to try it out and report any issues you have with it.

Friday, September 15, 2017

Introducing Jsonics

Introducing Jsonics

Over the past months I have been working on a new opensource Json library for .net called Jsonics.
I am now pleased to announce its first release 0.1.0-alpha.

What is Jsonics?

Jsonics is a high performance Json Library for c#. Jsonics stands for JSON In C Sharp. Jsonics aims to be as fast as is possible in scenarios where the same type will be serialised or deserialised many times. Jsonics uses runtime code generation and other advanced techniques to create an optimal serialiser and deserialiser based on the supplied type.

How do I use it?


//create an optimised Json converter for type Person
var jsonConverter = JsonicFactory.Compile();

//serilize a person instance 
string jsonstring = jsonCoverter.ToJson(new Person(){"FirstName"="Luke", "LastName"="Skywalker"});

//deserialise a person json string
Person person = jsonCoverter.FromJson(jsonString);


How fast is it?

Nearlly all Json parsers claim to be the fast. Here are some claims by popular .net Json libraries.

Newtonsoft (Json.net):

  • high-performance JSON framework for .NET
  • 50% faster than DataContractJsonSerializer, and 250% faster than JavaScriptSerializer.
NetJson
  • Faster than Any Binary?
JIL
  • Jil aims to be the fastest general purpose JSON (de)serializer for .NET.

I don't want to make any claims about speed. These tend to either be proven wrong or to fail to age well. However Jsonics does have a focus on speed and currently performs well in relation to other .net Json libraries. The following is a benchmark created using the awesome BenchmarkDotNet  library.


I have uploaded the benchmark code to github here if you are interested in details.

Please bare in mind that performance is very dependent on your use case, so it is best to benchmark with your own workload before choosing a library.

Features

Jsonics has support for most commonly used .net types. If you find a type you need is missing please raise an issue and I will add it.

Limitations

Jsonics is a pre 1.0 alpha release and as such is missing some features, these will be added before Jsonics will be deemed production ready. These include:
  • Ignore support for properties
  • Custom ToJson/FromJson converters
  • Decimal and char type support

How do I get it?

Jsonics is available on Nuget in both Signed and Unsigned versions.

The code is available on github here under the MIT license.

Jsonics is currently in alpha quality and should not be used for production code. However feel free to try it out and report any issues you have with it.