// using System; // using System.Text.Json; // using System.Text.Json.Serialization; // using InnovEnergy.S3.Records; // using InnovEnergy.S3.Records.Fields; // // namespace InnovEnergy.S3.Serialization // { // public class SubClassConverterFactory : JsonConverterFactory // { // public override Boolean CanConvert(Type t) // { // return t.IsAbstract && t.IsClass; // } // // public override JsonConverter CreateConverter(Type type, JsonSerializerOptions options) // { // var converterType = typeof(SubClassConverter<>).MakeGenericType(type); // return (JsonConverter) Activator.CreateInstance(converterType)!; // } // // public class SubClassConverter : JsonConverter // { // public override Boolean CanConvert(Type type) // { // return type == typeof(T); // } // // public override T Read(ref Utf8JsonReader r, Type t, JsonSerializerOptions o) // { // throw new NotImplementedException(); // } // // public override void Write(Utf8JsonWriter writer, T obj, JsonSerializerOptions options) // { // JsonSerializer.Serialize(writer, obj, obj!.GetType()); // } // } // } // // public class DataRecordConverter : JsonConverter // { // public override Boolean CanConvert(Type type) // { // return typeof(Record).IsAssignableFrom(type); // } // // public override Record Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) // { // throw new NotImplementedException(); // } // // public override void Write(Utf8JsonWriter writer, Record @record, JsonSerializerOptions options) // { // writer.WriteStartObject(); // // foreach (var field in record.Fields) // { // writer.WritePropertyName(field.Name); // // if (field is NumberField an) // { // writer.WriteStartObject(); // writer.WriteNumber("Min", an.Min); // writer.WriteNumber("Max", an.Max); // writer.WriteNumber("Mean", an.Value); // writer.WriteEndObject(); // } // else if (field is TextField at) // { // writer.WriteStartObject(); // foreach (var f in at.Frequencies) // { // writer.WriteNumber(f.Text, f.Percent); // } // writer.WriteEndObject(); // } // else if (field is BooleanField ab) // { // writer.WriteStartObject(); // writer.WriteNumber("PercentTrue", ab.PercentTrue); // writer.WriteEndObject(); // } // else // throw new NotSupportedException(); // } // // writer.WriteNumber("Time", record.TimeStamp.Ticks); // writer.WriteNumber("Availability", record.Availability); // // writer.WriteEndObject(); // } // } // // // public class AggregatedRecordConverter : JsonConverter // // { // // public override Boolean CanConvert(Type type) // // { // // return typeof(AggregatedRecord).IsAssignableFrom(type); // // } // // // // public override AggregatedRecord Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => throw new NotImplementedException(); // // // // public override void Write(Utf8JsonWriter writer, AggregatedRecord dataRecord, JsonSerializerOptions options) // // { // // writer.WriteStartObject(); // // // // foreach (var field in dataRecord.Fields) // // { // // if (field is AggregatedNumber n) // // { // // writer.WritePropertyName(n.Name); // // writer.WriteStartObject(); // // writer.WritePropertyName("Mean"); // // writer.WriteNumberValue(n.Mean); // // // // writer.WritePropertyName("Min"); // // writer.WriteNumberValue(n.Min); // // // // writer.WritePropertyName("Max"); // // writer.WriteNumberValue(n.Max); // // // // writer.WriteEndObject(); // // } // // else if (field is AggregatedText t) // // { // // writer.WritePropertyName(t.Name); // // JsonSerializer.Serialize(writer, t); // // } // // else if (field is AggregatedBoolean b) // // { // // writer.WritePropertyName(b.Name); // // JsonSerializer.Serialize(writer, b); // // } // // // // else throw new NotSupportedException(); // // } // // // // writer.WriteEndObject(); // // } // // // // // // // // // // } // // // public class TextFrequencyConverter : JsonConverter // // { // // public override Boolean CanConvert(Type type) // // { // // return typeof(TextFrequency).IsAssignableFrom(type); // // } // // // // public override TextFrequency Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => throw new NotImplementedException(); // // // // public override void Write(Utf8JsonWriter writer, TextFrequency textFrequency, JsonSerializerOptions options) // // { // // writer.WriteStartObject(); // // writer.WritePropertyName(textFrequency.Text); // // writer.WriteNumberValue(textFrequency.Percent); // // writer.WriteEndObject(); // // } // // } // // // // }