Skip to main content

Meadow.Foundation.Serialization.MicroJson

MicroJson
StatusStatus badge: working
Source codeGitHub
NuGet packageNuGet Gallery for Meadow.Foundation.Serialization.MicroJson

Code Example

public static void Main(string[] args)
{
var resourceData = LoadResource("menu.json");

var menuJson = new string(System.Text.Encoding.UTF8.GetChars(resourceData));

DeserializeTypeSafe(menuJson);
DeserializeAsHashtable(menuJson);
}

private static void DeserializeTypeSafe(string menuJson)
{
string testJsonItem = "{\"ScreenX\":290,\"ScreenY\":210,\"RawX\":3341,\"RawY\":3353}";
var point = MicroJson.Deserialize<CalibrationPoint>(testJsonItem);

string testJsonArray = "[{\"ScreenX\":30,\"ScreenY\":30,\"RawX\":522,\"RawY\":514},{\"ScreenX\":290,\"ScreenY\":210,\"RawX\":3341,\"RawY\":3353}]";

var points = MicroJson.Deserialize<CalibrationPoint[]>(testJsonArray);

var menu = MicroJson.Deserialize<MenuContainer>(menuJson);
}

private static void DeserializeAsHashtable(string menuJson)
{
var menuData = MicroJson.DeserializeString(menuJson) as Hashtable;

if (menuData["menu"] == null)
{
throw new ArgumentException("JSON root must contain a 'menu' item");
}

Console.WriteLine($"Root element is {menuData["menu"]}");

var items = (ArrayList)menuData["menu"];

foreach (Hashtable item in items)
{
Console.WriteLine($"Found {item["text"]}");
}
}

private static byte[] LoadResource(string filename)
{
var assembly = Assembly.GetExecutingAssembly();
var resourceName = $"MicroJson_Sample.{filename}";

using Stream stream = assembly.GetManifestResourceStream(resourceName);
using var ms = new MemoryStream();
stream.CopyTo(ms);
return ms.ToArray();
}

Sample project(s) available on GitHub