//
//
// 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();
}
}