This commit is contained in:
Александр Бабаев 2024-03-28 14:08:59 +03:00
parent 84d94a2463
commit f19ee998af
5 changed files with 166 additions and 347 deletions

View File

@ -9,7 +9,10 @@ namespace anbs_cp.Classes;
/* /*
История версий История версий
Обновлено 2024.03.28
* Все поля Errors, Warnings и Infos объеденены в одно Messages
* В ActionStateMessage добавлен параметр, определяющий тип: MessageType
Обновлено 2024.03.26 Обновлено 2024.03.26
* Все интерфейсы объеденины в один класс ActionStateMessage * Все интерфейсы объеденины в один класс ActionStateMessage
* Интерфейс IActionState удалён * Интерфейс IActionState удалён
@ -27,48 +30,33 @@ namespace anbs_cp.Classes;
*/ */
/// <inheritdoc /> /// <inheritdoc />
public class ActionState<T>: ISerializable public class ActionState<T> (T? defaultValue = default): ISerializable
{ {
/// <summary>
/// Конструктор по умолчанию
/// </summary>
// ReSharper disable once MemberCanBeProtected.Global
public ActionState ()
{
Messages = [];
Value = default;
}
/// <summary>
/// Конструктор с указанием начального значения <see cref="Value"/>
/// </summary>
/// <param name="defaultValue">Начальное значение <see cref="Value"/></param>
public ActionState (T defaultValue)
{
Messages = [];
Value = defaultValue;
}
/// <summary> /// <summary>
/// Список информации /// Список информации
/// </summary> /// </summary>
public List<ActionStateMessage> Messages { get; } // ReSharper disable once CollectionNeverQueried.Local
internal List<ActionStateMessage> Messages { get; } = [];
/// <summary> /// <summary>
/// Значение /// Значение
/// </summary> /// </summary>
public T? Value { get; set; } public T? Value { get; set; } = defaultValue;
/// <summary>
/// Метод для выбора всех значений для условия
/// </summary>
// ReSharper disable once StaticMemberInGenericType
public static readonly Func<ActionStateMessage, bool> SelectAll = _ => true;
#region Методы #region Методы
#region Очистка #region Очистка
/// <summary> /// <summary>
/// Очищает список ошибок /// Очищает список ошибок
/// </summary> /// </summary>
public void ClearErrors () public void ClearErrors ()
{ {
Errors.Clear(); Clear(message => message.MessageType == EActionStateMessageType.Error);
Errors.TrimExcess();
} }
/// <summary> /// <summary>
@ -76,8 +64,7 @@ public class ActionState<T>: ISerializable
/// </summary> /// </summary>
public void ClearWarnings () public void ClearWarnings ()
{ {
Warnings.Clear(); Clear(message => message.MessageType == EActionStateMessageType.Warning);
Warnings.TrimExcess();
} }
/// <summary> /// <summary>
@ -85,18 +72,22 @@ public class ActionState<T>: ISerializable
/// </summary> /// </summary>
public void ClearInfo () public void ClearInfo ()
{ {
Info.Clear(); Clear(message => message.MessageType == EActionStateMessageType.Information);
Info.TrimExcess();
} }
/// <summary> /// <summary>
/// Очищает все списки /// Очищает список по условию <paramref name="predicate"/>
/// </summary> /// </summary>
public void Clear () /// <param name="predicate">Условие выборки</param>
public void Clear (Func<ActionStateMessage, bool> predicate)
{ {
ClearInfo(); // Получаю список элементов
ClearWarnings(); IEnumerable<ActionStateMessage> list = Messages.Where(predicate);
ClearErrors();
// Для каждого элемента
foreach (ActionStateMessage actionStateMessage in list)
// - запускаю его удаление
Messages.Remove(actionStateMessage);
} }
#endregion #endregion
@ -116,39 +107,21 @@ public class ActionState<T>: ISerializable
public void AddRange (IEnumerable<ActionStateMessage> messages) => Messages.AddRange(messages); public void AddRange (IEnumerable<ActionStateMessage> messages) => Messages.AddRange(messages);
#endregion #endregion
#region Добавление ошибки #region Добавление ошибки
/// <summary> /// <summary>
/// Добавление ошибки /// Добавление ошибки
/// </summary> /// </summary>
/// <param name="critical">Является ли ошибка критической</param> /// <param name="critical">Является ли ошибка критической</param>
public void AddError (bool critical = true) public void AddError (bool critical = true) => Add(new(EActionStateMessageType.Error, critical));
{
//Создаю ошибку
ActionStateMessage error = new("", critical)
{
MessageType = EActionStateMessageType.Error
};
//Добавляю ошибку
Add(error);
}
/// <summary> /// <summary>
/// Добавление ошибки /// Добавление ошибки
/// </summary> /// </summary>
/// <param name="message">Сообщение об ошибке</param> /// <param name="message">Сообщение об ошибке</param>
/// <param name="critical">Является ли ошибка критической</param> /// <param name="critical">Является ли ошибка критической</param>
public void AddError (string message, bool critical = true) public void AddError (string message, bool critical = true) =>
{ Add(new(EActionStateMessageType.Error, critical, message: message));
//Создаю ошибку
ActionStateMessage error = new(message, critical)
{
MessageType = EActionStateMessageType.Error
};
//Добавляю ошибку
Add(error);
}
/// <summary> /// <summary>
/// Добавление ошибки /// Добавление ошибки
@ -156,73 +129,28 @@ public class ActionState<T>: ISerializable
/// <param name="errorObject">Объект ошибки</param> /// <param name="errorObject">Объект ошибки</param>
/// <param name="message">Сообщение об ошибке</param> /// <param name="message">Сообщение об ошибке</param>
/// /// <param name="critical">Является ли ошибка критической</param> /// /// <param name="critical">Является ли ошибка критической</param>
public void AddError (string errorObject, string message, bool critical = true) public void AddError (string errorObject, string message, bool critical = true) =>
{ Add(new(EActionStateMessageType.Error, critical, errorObject, message));
//Создаю ошибку
ActionStateMessage error = new(errorObject, message, critical)
{
MessageType = EActionStateMessageType.Error
};
//Добавляю ошибку
Add(error);
}
#endregion #endregion
#region Добавление предупреждения #region Добавление предупреждения
/// <summary>
/// Добавление предупреждения
/// </summary>
/// <param name="warning">Предупреждение</param>
public void AddWarning (ActionStateMessage warning) => Warnings.Add(warning);
/// <summary>
/// Добавление предупреждений
/// </summary>
/// <param name="warnings">Список предупреждений</param>
public void AddWarnings (IEnumerable<ActionStateMessage> warnings) => Warnings.AddRange(warnings);
/// <summary> /// <summary>
/// Добавление предупреждение /// Добавление предупреждение
/// </summary> /// </summary>
/// <param name="message">Текст предупреждения</param> /// <param name="message">Текст предупреждения</param>
/// <param name="warningObject">Объект предупреждения</param> /// <param name="warningObject">Объект предупреждения</param>
public void AddWarning (string message, string warningObject = "") public void AddWarning (string message, string warningObject = "") =>
{ Add(new(EActionStateMessageType.Warning, message: message, obj: warningObject));
//Создаю предупреждение
ActionStateMessage warning = new(warningObject, message);
//Добавляю предупреждение
AddWarning(warning);
}
#endregion #endregion
#region Добавление информации #region Добавление информации
/// <summary>
/// Добавление информации
/// </summary>
/// <param name="info">Информация</param>
public void AddInfo (ActionStateMessage info) => Info.Add(info);
/// <summary>
/// Добавление информации
/// </summary>
/// <param name="infos">Список информации</param>
public void AddInfos (IEnumerable<ActionStateMessage> infos) => Info.AddRange(infos);
/// <summary> /// <summary>
/// Добавление информации /// Добавление информации
/// </summary> /// </summary>
/// <param name="message">Текст информации</param> /// <param name="message">Текст информации</param>
/// <param name="infoObject">Объект информации</param> /// <param name="infoObject">Объект информации</param>
public void AddInfo (string message, string infoObject = "") public void AddInfo (string message, string infoObject = "") => Add(new(message: message, obj: infoObject));
{
//Создаю информацию
ActionStateMessage info = new(infoObject, message);
//Добавляю информацию
AddInfo(info);
}
#endregion #endregion
#region Печать #region Печать
@ -243,22 +171,20 @@ public class ActionState<T>: ISerializable
switch (area) switch (area)
{ {
case EActionStatePrintArea.All: case EActionStatePrintArea.All:
list.AddRange(Errors); list.AddRange(Messages);
list.AddRange(Warnings);
list.AddRange(Info);
break; break;
case EActionStatePrintArea.ErrorsAndWarnings: case EActionStatePrintArea.ErrorsAndWarnings:
list.AddRange(Errors); list.AddRange(Messages.Where(message =>
list.AddRange(Warnings); message.MessageType is EActionStateMessageType.Error or EActionStateMessageType.Warning));
break; break;
case EActionStatePrintArea.ErrorsOnly: case EActionStatePrintArea.ErrorsOnly:
list.AddRange(Errors); list.AddRange(Messages.Where(message => message.MessageType == EActionStateMessageType.Error));
break; break;
case EActionStatePrintArea.WarningsOnly: case EActionStatePrintArea.WarningsOnly:
list.AddRange(Warnings); list.AddRange(Messages.Where(message => message.MessageType == EActionStateMessageType.Warning));
break; break;
case EActionStatePrintArea.InfosOnly: case EActionStatePrintArea.InfosOnly:
list.AddRange(Info); list.AddRange(Messages.Where(message => message.MessageType == EActionStateMessageType.Information));
break; break;
default: default:
throw new ArgumentOutOfRangeException(nameof(area), area, null); throw new ArgumentOutOfRangeException(nameof(area), area, null);
@ -278,24 +204,24 @@ public class ActionState<T>: ISerializable
/// </summary> /// </summary>
/// <param name="ignoreNonCritical">Игнорировать не критические</param> /// <param name="ignoreNonCritical">Игнорировать не критические</param>
/// <returns>Наличие ошибок</returns> /// <returns>Наличие ошибок</returns>
public bool HasErrors (bool ignoreNonCritical = false) => public bool HasErrors (bool ignoreNonCritical = false) => Messages.Any(message =>
ignoreNonCritical ? Errors.Any(static error => error.IsCritical) : Errors.Any(); message.MessageType == EActionStateMessageType.Error && (!ignoreNonCritical || !message.IsCritical));
/// <summary> /// <summary>
/// Проверяет, есть ли предупреждения /// Проверяет, есть ли предупреждения
/// </summary> /// </summary>
/// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param> /// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param>
/// <returns>Наличие предупреждений</returns> /// <returns>Наличие предупреждений</returns>
public bool HasWarnings (bool ignoreInformWarning = false) => ignoreInformWarning public bool HasWarnings (bool ignoreInformWarning = false) => Messages.Any(message =>
? Warnings.Any(static warning => warning.IsCritical) message.MessageType == EActionStateMessageType.Warning && (!ignoreInformWarning || !message.IsCritical));
: Warnings.Any();
/// <summary> /// <summary>
/// Проверяет, есть ли сообщения /// Проверяет, есть ли сообщения
/// </summary> /// </summary>
/// <param name="ignoreStatus">Игнорировать статусные сообщения</param> /// <param name="ignoreStatus">Игнорировать статусные сообщения</param>
/// <returns>Наличие сообщений</returns> /// <returns>Наличие сообщений</returns>
public bool HasInfo (bool ignoreStatus) => ignoreStatus ? Info.Any(static info => info.IsCritical) : Info.Any(); public bool HasInfo (bool ignoreStatus) => Messages.Any(message =>
message.MessageType == EActionStateMessageType.Information && (!ignoreStatus || !message.IsCritical));
/// <summary> /// <summary>
/// Успешно ли завершилось /// Успешно ли завершилось
@ -305,46 +231,45 @@ public class ActionState<T>: ISerializable
#endregion #endregion
#region Количество сообщений #region Количество сообщений
/// <summary>
/// Количество сообщений, удовлеьворяющих условию <paramref name="predicate"/>
/// </summary>
/// <param name="predicate">Условие выборки</param>
/// <returns>Число сообщений</returns>
public int Count (Func<ActionStateMessage, bool> predicate) => Messages.Count(predicate);
/// <summary> /// <summary>
/// Количество ошибок /// Количество ошибок
/// </summary> /// </summary>
/// <param name="ignoreNonCritical">Игнорировать не критические</param> /// <param name="ignoreNonCritical">Игнорировать не критические</param>
/// <returns>Количество ошибок</returns> /// <returns>Количество ошибок</returns>
public int ErrorsCount (bool ignoreNonCritical = false) => public int ErrorsCount (bool ignoreNonCritical = false) => Count(message =>
ignoreNonCritical ? Errors.Count(static error => error.IsCritical) : Errors.Count; message.MessageType == EActionStateMessageType.Error && (!ignoreNonCritical || !message.IsCritical));
/// <summary> /// <summary>
/// Количество предупреждений /// Количество предупреждений
/// </summary> /// </summary>
/// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param> /// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param>
/// <returns>Количество предупреждений</returns> /// <returns>Количество предупреждений</returns>
public int WarningsCount (bool ignoreInformWarning = false) => ignoreInformWarning public int WarningsCount (bool ignoreInformWarning = false) => Count(message =>
? Warnings.Count(static warning => warning.IsCritical) message.MessageType == EActionStateMessageType.Warning && (!ignoreInformWarning || !message.IsCritical));
: Warnings.Count;
/// <summary> /// <summary>
/// Количество информационных сообщений /// Количество информационных сообщений
/// </summary> /// </summary>
/// <param name="ignoreStatus">Игнорировать статусные сообщения</param> /// <param name="ignoreStatus">Игнорировать статусные сообщения</param>
/// <returns>Количество информационных сообщений</returns> /// <returns>Количество информационных сообщений</returns>
public int InfoCount (bool ignoreStatus) => ignoreStatus public int InfoCount (bool ignoreStatus) => Count(message =>
? Info.Count(static info => info.IsCritical) message.MessageType == EActionStateMessageType.Information && (!ignoreStatus || !message.IsCritical));
: Info.Count;
#endregion #endregion
#region Добавление другого состояния #region Добавление другого состояния
/// <summary> /// <summary>
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>). /// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
/// </summary> /// </summary>
/// <typeparam name="T">Тип параметра</typeparam> /// <typeparam name="T">Тип параметра</typeparam>
/// <param name="state">Запись состояния</param> /// <param name="state">Запись состояния</param>
public void AddState (ActionState<T> state) public void AddState (ActionState<T> state) => AddRange(state.Messages);
{
AddErrors(state.Errors);
AddWarnings(state.Warnings);
AddInfos(state.Info);
}
#endregion #endregion
#endregion #endregion
@ -355,20 +280,10 @@ public class ActionState<T>: ISerializable
// Создаю модель // Создаю модель
ActionStateSerializable serializableModel = new(); ActionStateSerializable serializableModel = new();
// Для каждого информационного сообщения // Для каждого сообщения
foreach (ActionStateMessage info in Info) foreach (ActionStateMessage message in Messages)
// - добавляю в модель // - добавляю в модель
serializableModel.Info.Add(info.Serialize()); serializableModel.Messages.Add(message.Serialize());
// Для каждого предупреждения
foreach (ActionStateMessage warning in Warnings)
// - добавляю в модель
serializableModel.Info.Add(warning.Serialize());
// Для каждой ошибки
foreach (ActionStateMessage error in Errors)
// - добавляю в модель
serializableModel.Info.Add(error.Serialize());
// Создаю модель значения // Создаю модель значения
ActionStateSerializableValue value = new(); ActionStateSerializableValue value = new();
@ -397,37 +312,17 @@ public class ActionState<T>: ISerializable
ActionStateSerializableValue value = new(); ActionStateSerializableValue value = new();
// Очищаю списки // Очищаю списки
Info.Clear(); Clear(SelectAll);
Warnings.Clear();
Errors.Clear();
// Для каждого информационного сообщения // Для каждого сообщения
foreach (string infoString in itemSerializable.Info) foreach (string messageString in itemSerializable.Messages)
{ {
// - создаю сообщение // - создаю сообщение
ActionStateMessage info = new(); ActionStateMessage message = new();
// - десериализую в него данные из модели // - десериализую в него данные из модели
info.Deserialize(infoString); message.Deserialize(messageString);
// - добавляю в список // - добавляю в список
Info.Add(info); Add(message);
}
foreach (string warningString in itemSerializable.Warnings)
{
// - создаю сообщение
ActionStateMessage warning = new();
// - десериализую в него данные из модели
warning.Deserialize(warningString);
// - добавляю в список
Info.Add(warning);
}
foreach (string errorString in itemSerializable.Errors)
{
// - создаю сообщение
ActionStateMessage error = new();
// - десериализую в него данные из модели
error.Deserialize(errorString);
// - добавляю в список
Info.Add(error);
} }
// Десериализую данные значения из модели // Десериализую данные значения из модели

View File

@ -9,143 +9,107 @@ namespace anbs_cp.Classes;
/// <summary> /// <summary>
/// Класс сообщения состояния /// Класс сообщения состояния
/// </summary> /// </summary>
public sealed class ActionStateMessage: ISerializable public sealed class ActionStateMessage (
EActionStateMessageType type = EActionStateMessageType.Information,
bool isCritical = false,
string obj = "",
string message = ""): ISerializable
{ {
#region Свойства #region Свойства
/// <summary> /// <summary>
/// Тип сообщения /// Тип сообщения
/// </summary> /// </summary>
public EActionStateMessageType MessageType { get; set; } = EActionStateMessageType.Information; public EActionStateMessageType MessageType { get; set; } = type;
/// <summary> /// <summary>
/// Критичность сообщения /// Критичность сообщения
/// </summary> /// </summary>
public bool IsCritical { get; set; } public bool IsCritical { get; set; } = isCritical;
/// <summary> /// <summary>
/// Объект сообщения /// Объект сообщения
/// </summary> /// </summary>
public string Object { get; set; } public string Object { get; set; } = obj;
/// <summary> /// <summary>
/// Текст сообщения /// Текст сообщения
/// </summary> /// </summary>
public string Message { get; set; } public string Message { get; set; } = message;
#endregion #endregion
#region Конструкторы #region Методы
/// <summary> /// <summary>
/// Конструктор по умолчанию /// Вывод сообщения
/// </summary> /// </summary>
// ReSharper disable once MemberCanBePrivate.Global /// <param name="format">Строка-форматирование (например, «[{0}] - {1}»)</param>
public ActionStateMessage () /// <returns>Отформатированную строка</returns>
{ public string PrintMessage (string format) => string.Format(format, Object, Message);
IsCritical = true;
Object = "Not Implemented";
Message = "Not Implemented";
}
/// <summary> /// <summary>
/// Конструктор с 2 параметрами /// Устанавливает объект
/// </summary> /// </summary>
/// <param name="message">Сообщение</param> /// <param name="obj">Объект</param>
/// <param name="isCritical">Критичность сообщения</param> /// <typeparam name="T">Тип объекта</typeparam>
public ActionStateMessage (string message, bool isCritical = true) public void SetObject<T> (T obj)
{
IsCritical = isCritical;
Object = "";
Message = message;
}
/// <summary>
/// Конструктор с 3 параметрами
/// </summary>
/// <param name="eObject">Объект сообщения</param>
/// <param name="message">Сообщение</param>
/// <param name="isCritical">Критичность сообщения</param>
public ActionStateMessage (string eObject, string message, bool isCritical = true)
{
IsCritical = isCritical;
Object = eObject;
Message = message;
}
#endregion
#region Методы
/// <summary>
/// Вывод сообщения
/// </summary>
/// <param name="format">Строка-форматирование (например, «[{0}] - {1}»)</param>
/// <returns>Отформатированную строка</returns>
public string PrintMessage (string format) => string.Format(format, Object, Message);
/// <summary>
/// Устанавливает объект
/// </summary>
/// <param name="obj">Объект</param>
/// <typeparam name="T">Тип объекта</typeparam>
public void SetObject<T> (T obj)
{
// Если объект реализует интерфейс ISerializable
if (obj is ISerializable serializable)
{ {
// - то сериализуем его методами интерфейса // Если объект реализует интерфейс ISerializable
Object = serializable.Serialize(); if (obj is ISerializable serializable)
// - и прерываем {
return; // - то сериализуем его методами интерфейса
Object = serializable.Serialize();
// - и прерываем
return;
}
// Сериализуем объект с помощью NewtonsoftJson
Object = new NewtonsoftJsonSerializer().Serialize(obj);
} }
// Сериализуем объект с помощью NewtonsoftJson /// <summary>
Object = new NewtonsoftJsonSerializer().Serialize(obj); /// Получает объект
} /// </summary>
/// <typeparam name="T">Класс объекта</typeparam>
/// <returns>Объект или null</returns>
public T? GetObject<T> () => new NewtonsoftJsonSerializer().Deserialize<T>(Object);
/// <summary> /// <summary>
/// Получает объект /// Получает объект
/// </summary> /// </summary>
/// <typeparam name="T">Класс объекта</typeparam> /// <typeparam name="T">Класс объекта, реализующий интерфейс ISerializable</typeparam>
/// <returns>Объект или null</returns> /// <returns>Объект</returns>
public T? GetObject<T> () => new NewtonsoftJsonSerializer().Deserialize<T>(Object); public T GetSerializedObject<T> () where T : ISerializable, new()
{
// Создаём результирующую модель
T model = new();
/// <summary> // Десериализуем её методами интерфейса ISerializable
/// Получает объект model.Deserialize(Object);
/// </summary>
/// <typeparam name="T">Класс объекта, реализующий интерфейс ISerializable</typeparam>
/// <returns>Объект</returns>
public T GetSerializedObject<T> () where T : ISerializable, new()
{
// Создаём результирующую модель
T model = new();
// Десериализуем её методами интерфейса ISerializable // Возвращаем модель
model.Deserialize(Object); return model;
}
// Возвращаем модель #endregion
return model;
}
#endregion #region Реализация интерфейса ISerializable
#region Реализация интерфейса ISerializable /// <inheritdoc />
public string Serialize () => new NewtonsoftJsonSerializer().Serialize(this);
/// <inheritdoc /> /// <inheritdoc />
public string Serialize () => new NewtonsoftJsonSerializer().Serialize(this); public void Deserialize (string json)
{
// Десериализую строку
ActionStateMessage item = new NewtonsoftJsonSerializer().Deserialize<ActionStateMessage>(json) ?? new();
/// <inheritdoc /> // Передаю параметры
public void Deserialize (string json) MessageType = item.MessageType;
{ IsCritical = item.IsCritical;
// Десериализую строку Object = item.Object;
ActionStateMessage item = new NewtonsoftJsonSerializer().Deserialize<ActionStateMessage>(json) ?? new(); Message = item.Message;
}
// Передаю параметры #endregion
MessageType = item.MessageType;
IsCritical = item.IsCritical;
Object = item.Object;
Message = item.Message;
}
#endregion
} }

View File

@ -7,19 +7,9 @@ namespace anbs_cp.Classes;
public class ActionStateSerializable public class ActionStateSerializable
{ {
/// <summary> /// <summary>
/// Список информации /// Список всех сообщений
/// </summary> /// </summary>
public List<string> Info { get; } = []; public List<string> Messages { get; } = [];
/// <summary>
/// Список предупреждений
/// </summary>
public List<string> Warnings { get; } = [];
/// <summary>
/// Список ошибок
/// </summary>
public List<string> Errors { get; } = [];
/// <summary> /// <summary>
/// Значение /// Значение

View File

@ -31,20 +31,10 @@ public sealed class ActionStateSerialized<T>: ActionState<T> where T : ISerializ
// Создаю модель // Создаю модель
ActionStateSerializable serializableModel = new(); ActionStateSerializable serializableModel = new();
// Для каждого информационного сообщения // Для каждого сообщения
foreach (ActionStateMessage info in Info) foreach (ActionStateMessage message in Messages)
// - добавляю в модель // - добавляю в модель
serializableModel.Info.Add(info.Serialize()); serializableModel.Messages.Add(message.Serialize());
// Для каждого предупреждения
foreach (ActionStateMessage warning in Warnings)
// - добавляю в модель
serializableModel.Info.Add(warning.Serialize());
// Для каждой ошибки
foreach (ActionStateMessage error in Errors)
// - добавляю в модель
serializableModel.Info.Add(error.Serialize());
// Создаю модель значения // Создаю модель значения
ActionStateSerializableValue value = new(); ActionStateSerializableValue value = new();
@ -73,37 +63,17 @@ public sealed class ActionStateSerialized<T>: ActionState<T> where T : ISerializ
ActionStateSerializableValue value = new(); ActionStateSerializableValue value = new();
// Очищаю списки // Очищаю списки
Info.Clear(); Clear(SelectAll);
Warnings.Clear();
Errors.Clear();
// Для каждого информационного сообщения // Для каждого сообщения
foreach (string infoString in itemSerializable.Info) foreach (string messageString in itemSerializable.Messages)
{ {
// - создаю сообщение // - создаю сообщение
ActionStateMessage info = new(); ActionStateMessage message = new();
// - десериализую в него данные из модели // - десериализую в него данные из модели
info.Deserialize(infoString); message.Deserialize(messageString);
// - добавляю в список // - добавляю в список
Info.Add(info); Add(message);
}
foreach (string warningString in itemSerializable.Warnings)
{
// - создаю сообщение
ActionStateMessage warning = new();
// - десериализую в него данные из модели
warning.Deserialize(warningString);
// - добавляю в список
Info.Add(warning);
}
foreach (string errorString in itemSerializable.Errors)
{
// - создаю сообщение
ActionStateMessage error = new();
// - десериализую в него данные из модели
error.Deserialize(errorString);
// - добавляю в список
Info.Add(error);
} }
// Десериализую данные значения из модели // Десериализую данные значения из модели

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<Version>2024.3.27.2</Version> <Version>2024.3.28</Version>
<Authors>Александр Бабаев</Authors> <Authors>Александр Бабаев</Authors>
<Product>Набор компонентов ANB Software</Product> <Product>Набор компонентов ANB Software</Product>
<Description>Библиотека полезных методов языка C#</Description> <Description>Библиотека полезных методов языка C#</Description>