forked from ddrilling/AsbCloudServer
Добавлено WitsRecordDto
This commit is contained in:
parent
7d83a0a93d
commit
2e1678f401
14
AsbCloudApp/Data/GTR/JsonValue.cs
Normal file
14
AsbCloudApp/Data/GTR/JsonValue.cs
Normal file
@ -0,0 +1,14 @@
|
||||
namespace AsbCloudApp.Data.GTR
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс позволяющий хранить значение неопределенного типа.
|
||||
/// Все возможные типы должны быть описаны в JsonValueJsonConverter.
|
||||
/// </summary>
|
||||
/// <param name="Value"></param>
|
||||
public record JsonValue(object Value)
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public override string ToString()
|
||||
=> Value.ToString() ?? string.Empty;
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace AsbCloudApp.Data.GTR
|
||||
{
|
||||
/// <summary>
|
||||
/// класс для получения данных ГТИ с значением типа float
|
||||
/// </summary>
|
||||
public class WitsFloatDto : ITelemetryData
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public DateTime DateTime { get; set; }
|
||||
/// <inheritdoc/>
|
||||
public int IdTelemetry { get; set; }
|
||||
/// <summary>
|
||||
/// ИД рекорда согласно спецификации WITS
|
||||
/// </summary>
|
||||
public int IdRecord { get; set; }
|
||||
/// <summary>
|
||||
/// ИД элемента рекорда согласно спецификации WITS
|
||||
/// </summary>
|
||||
public int IdItem { get; set; }
|
||||
/// <inheritdoc/>
|
||||
public float? Value { get; set; }
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace AsbCloudApp.Data.GTR
|
||||
{
|
||||
/// <summary>
|
||||
/// класс для получения данных ГТИ с значением типа int16 int32
|
||||
/// </summary>
|
||||
public class WitsIntDto
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public DateTime DateTime { get; set; }
|
||||
/// <inheritdoc/>
|
||||
public int IdTelemetry { get; set; }
|
||||
/// <summary>
|
||||
/// ИД рекорда согласно спецификации WITS
|
||||
/// </summary>
|
||||
public int IdRecord { get; set; }
|
||||
/// <summary>
|
||||
/// ИД элемента рекорда согласно спецификации WITS
|
||||
/// </summary>
|
||||
public int IdItem { get; set; }
|
||||
/// <inheritdoc/>
|
||||
public int? Value { get; set; }
|
||||
}
|
||||
}
|
26
AsbCloudApp/Data/GTR/WitsRecordDto.cs
Normal file
26
AsbCloudApp/Data/GTR/WitsRecordDto.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AsbCloudApp.Data.GTR
|
||||
{
|
||||
/// <summary>
|
||||
/// Запись WITS
|
||||
/// </summary>
|
||||
public class WitsRecordDto
|
||||
{
|
||||
/// <summary>
|
||||
/// Id записи
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дата создания записи
|
||||
/// </summary>
|
||||
public DateTime Date { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Параметры. Ключ - id_item. ValueContainer содержит значение.
|
||||
/// </summary>
|
||||
public Dictionary<int, JsonValue> Items { get; set; } = new();
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace AsbCloudApp.Data.GTR
|
||||
{
|
||||
/// <summary>
|
||||
/// класс для получения данных ГТИ с значением типа string
|
||||
/// </summary>
|
||||
public class WitsStrDto : WitsBaseDto
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public DateTime DateTime { get; set; }
|
||||
/// <inheritdoc/>
|
||||
public int IdTelemetry { get; set; }
|
||||
/// <summary>
|
||||
/// ИД рекорда согласно спецификации WITS
|
||||
/// </summary>
|
||||
public int IdRecord { get; set; }
|
||||
/// <summary>
|
||||
/// ИД элемента рекорда согласно спецификации WITS
|
||||
/// </summary>
|
||||
public int IdItem { get; set; }
|
||||
/// <inheritdoc/>
|
||||
public string? Value { get; set; }
|
||||
}
|
||||
}
|
74
AsbCloudWebApi/Converters/ValueContainerJsonConverter.cs
Normal file
74
AsbCloudWebApi/Converters/ValueContainerJsonConverter.cs
Normal file
@ -0,0 +1,74 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Text.Json;
|
||||
using AsbCloudApp.Data.GTR;
|
||||
|
||||
namespace AsbCloudWebApi.Converters
|
||||
{
|
||||
public class JsonValueJsonConverter : JsonConverter<JsonValue>
|
||||
{
|
||||
public override JsonValue Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
var stringVal = reader.GetString() ?? string.Empty;
|
||||
return new JsonValue(stringVal);
|
||||
}
|
||||
|
||||
if (reader.TokenType == JsonTokenType.Number)
|
||||
{
|
||||
if (reader.TryGetInt32(out int intVal))
|
||||
return new JsonValue(intVal);
|
||||
|
||||
if (reader.TryGetDouble(out double doubleVal))
|
||||
return new JsonValue((float)doubleVal);
|
||||
}
|
||||
|
||||
throw new FormatException($"Wrong format at position {reader.Position}");
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, JsonValue value, JsonSerializerOptions options)
|
||||
{
|
||||
if (value.Value is string strValue)
|
||||
{
|
||||
writer.WriteStringValue(FormatString(strValue));
|
||||
return;
|
||||
}
|
||||
|
||||
if (value.Value is int intValue)
|
||||
{
|
||||
writer.WriteNumberValue(intValue);
|
||||
return;
|
||||
}
|
||||
|
||||
if (value.Value is short shortValue)
|
||||
{
|
||||
writer.WriteNumberValue(shortValue);
|
||||
return;
|
||||
}
|
||||
|
||||
if (value.Value is float floatValue)
|
||||
{
|
||||
writer.WriteRawValue(floatValue.ToString("#0.0##", CultureInfo.InvariantCulture), true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (value.Value is double doubleValue)
|
||||
{
|
||||
writer.WriteRawValue(doubleValue.ToString("#0.0##", CultureInfo.InvariantCulture), true);
|
||||
return;
|
||||
}
|
||||
|
||||
var typeName = value.Value.GetType().Name;
|
||||
throw new NotImplementedException($"{typeName} is not supported type for WITS value");
|
||||
}
|
||||
|
||||
private static string FormatString(string value)
|
||||
=> value
|
||||
.Replace("\"", "")
|
||||
.Trim()
|
||||
.Replace("\r", "")
|
||||
.Replace("\n", "");
|
||||
}
|
||||
}
|
@ -22,13 +22,14 @@ namespace AsbCloudWebApi
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddControllers()
|
||||
.AddJsonOptions(new System.Action<Microsoft.AspNetCore.Mvc.JsonOptions>(options =>
|
||||
.AddJsonOptions(new System.Action<JsonOptions>(options =>
|
||||
{
|
||||
options.JsonSerializerOptions.NumberHandling =
|
||||
System.Text.Json.Serialization.JsonNumberHandling.AllowNamedFloatingPointLiterals |
|
||||
System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString;
|
||||
|
||||
options.JsonSerializerOptions.Converters.Add(new DateOnlyJsonConverter());
|
||||
options.JsonSerializerOptions.Converters.Add(new JsonValueJsonConverter());
|
||||
}))
|
||||
.AddProtoBufNet();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user