SharpYAJ 1.0.0
dotnet add package SharpYAJ --version 1.0.0
NuGet\Install-Package SharpYAJ -Version 1.0.0
<PackageReference Include="SharpYAJ" Version="1.0.0" />
<PackageVersion Include="SharpYAJ" Version="1.0.0" />
<PackageReference Include="SharpYAJ" />
paket add SharpYAJ --version 1.0.0
#r "nuget: SharpYAJ, 1.0.0"
#:package SharpYAJ@1.0.0
#addin nuget:?package=SharpYAJ&version=1.0.0
#tool nuget:?package=SharpYAJ&version=1.0.0
SharpYAJ - YetAnotherJSON Reader/Writer for C#
SharpYAJ (pronounced as 'Sharp-Jay') is a .NET Standard 2.0 compatible library to serialize and deserialize JSON strings.
There's the class JavaScriptSerializer in .NET which does exactly this task, but unfortunately it's not yet included in .NET Standard any therefore only available when using .NET Framework. There would be Newtonsofts JSON implementation, but that library is way too big if you just want to read or write small JSON files, or if you just want simple .NET types instead of wrappers for each JSON type.
So, until the JavaScriptSerializer is defined in .NET Standard, this library can be used alternatively.
Reading
SharpYAJ deserializes objects the same way, JavaScriptSerializer does:
- Objects are represented as 
Dictionary<string, object> - Arrays are represented as 
IEnumerable<object> - Primitives are represented as their corresponding .NET type (int, double, string, bool, null (object))
 
using SharpYAJ;
var myJSONString = "[1, 3, 3, 7, \"is\", true]";
object deserialized = YAJReader.ReadJSON(myJSONString);
//deserialized: IEnumerable<object> { 1, 3, 3, 7, "is", true }
Using internal methods
Beside ReadJSON, YAJReader contains methods like ReadArray, ReadInt, ReadBool and so on. These methods are used internally. If you want to use these methods for whatever reason, you have to tell SharpYAJ to perform additional checks in these methods, as by default they omit checks done by the SharpYAJ-caller method. To annouce the usage of these methods, compile the library with the SHARE_INTERNAL_METHODS flag.
To be more performant, the reading is done by simply moving a cursor over the string, so that a new substring does not have to be created for each element. This string-shifting is done by the internal class StringView. This class is also only shown if you activate compiliation flag SHARE_INTERNAL_METHODS. So for using the internal methods, you have to create a StringView instance.
Writing
For writing objects SharpYAJ expects the same object types like it produced when reading a string:
- Objects have to be 
Dictionary<string, object> - Arrays have to be 
IEnumerable - Allowed primitive types are
shortintlongfloatdoublestringboolnull
 
using SharpYAJ;
var serialized = YAJReader.WriteJSON(deserialized);
//serialized: "[1,3,3,7,\"is\",true]"
Indention / PrettyPrint
By default, YAJWriter doesn't print any spaces or line-breaks to separate the elements.
If you want a pretty-printed JSON string, pass the indention flag to WriteJSON:
using SharpYAJ;
var serialized = YAJReader.WriteJSON(deserialized, true);
/*serialized:
"[
	1,
	3,
	3,
	7,
	\"is\",
	true
]"
*/
To specify the separation and line-break char, they can also be passed to WriteJSON:
using SharpYAJ;
var serialized = YAJReader.WriteJSON(deserialized, "~~~~", "\r\n");
/*serialized:
"[
~~~~1,
~~~~3,
~~~~3,
~~~~7,
~~~~\"is\",
~~~~true
]"
*/
Own pretty print implementation
Pretty printing is done using the internal class IndentWriter. If you want to implement pretty print yourself, create a subclass overriding the methods of IndentWriter and pass the instance to the WriteJSON method:
using SharpYAJ;
class MyIndentWriter : IndentWriter
{
	public override void Write(StringBuilder sb)
	{
		/* ... */
	}
}
var myIndentWriter = new MyIndentWriter();
var serialized = YAJReader.WriteJSON(deserialized, myIndentWriter);
License
SharpYAJ is licensed under the MIT License
| Product | Versions Compatible and additional computed target framework versions. | 
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. 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 was computed. 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. | 
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. | 
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. | 
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. | 
| MonoAndroid | monoandroid was computed. | 
| MonoMac | monomac was computed. | 
| MonoTouch | monotouch was computed. | 
| Tizen | tizen40 was computed. tizen60 was computed. | 
| Xamarin.iOS | xamarinios was computed. | 
| Xamarin.Mac | xamarinmac was computed. | 
| Xamarin.TVOS | xamarintvos was computed. | 
| Xamarin.WatchOS | xamarinwatchos was computed. | 
- 
                                                    
.NETStandard 2.0
- No dependencies.
 
 
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | 
|---|---|---|
| 1.0.0 | 13 | 5/6/2018 |