// // // To parse this JSON data, add NuGet 'Newtonsoft.Json' then do: // // using HeronTrack.Ingestion.Common.EventCatalog; // // var secondaryData = SecondaryData.FromJson(jsonString); namespace HeronTrack.Ingestion.Common.EventCatalog { using System; using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public partial class SecondaryData { [JsonProperty("batteryLevel", Required = Required.AllowNull)] public double? BatteryLevel { get; set; } [JsonProperty("correlationId", Required = Required.Always)] public string CorrelationId { get; set; } [JsonProperty("dataSource", Required = Required.Always)] public DataSource DataSource { get; set; } [JsonProperty("date", Required = Required.Always)] public DateTimeOffset Date { get; set; } [JsonProperty("fillingStatus", Required = Required.AllowNull)] public double? FillingStatus { get; set; } [JsonProperty("magnetClosed", Required = Required.AllowNull)] public bool? MagnetClosed { get; set; } [JsonProperty("tagId")] public string TagId { get; set; } [JsonProperty("tagIdentifier", Required = Required.AllowNull)] public string TagIdentifier { get; set; } [JsonProperty("tofCounter", Required = Required.AllowNull)] public double? TofCounter { get; set; } [JsonProperty("toolId", Required = Required.AllowNull)] public string ToolId { get; set; } } public enum DataSource { Iet10Rc1HeartBeat33, Iet10Rc1HeartBeat39, Iet10Rc1Magnet }; public partial class SecondaryData { public static SecondaryData FromJson(string json) => JsonConvert.DeserializeObject(json, HeronTrack.Ingestion.Common.EventCatalog.Converter.Settings); } public static class Serialize { public static string ToJson(this SecondaryData self) => JsonConvert.SerializeObject(self, HeronTrack.Ingestion.Common.EventCatalog.Converter.Settings); } internal static class Converter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, Converters = { DataSourceConverter.Singleton, new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } }, }; } internal class DataSourceConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(DataSource) || t == typeof(DataSource?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize(reader); switch (value) { case "IET10RC1-HeartBeat33": return DataSource.Iet10Rc1HeartBeat33; case "IET10RC1-HeartBeat39": return DataSource.Iet10Rc1HeartBeat39; case "IET10RC1-Magnet": return DataSource.Iet10Rc1Magnet; } throw new Exception("Cannot unmarshal type DataSource"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (DataSource)untypedValue; switch (value) { case DataSource.Iet10Rc1HeartBeat33: serializer.Serialize(writer, "IET10RC1-HeartBeat33"); return; case DataSource.Iet10Rc1HeartBeat39: serializer.Serialize(writer, "IET10RC1-HeartBeat39"); return; case DataSource.Iet10Rc1Magnet: serializer.Serialize(writer, "IET10RC1-Magnet"); return; } throw new Exception("Cannot marshal type DataSource"); } public static readonly DataSourceConverter Singleton = new DataSourceConverter(); } }