/
IMemberValueConverter.cs
49 lines (46 loc) · 3.55 KB
/
IMemberValueConverter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.Reflection;
namespace InfinniPlatform.Serialization
{
/// <summary>
/// Определяет правила преобразования значения свойства при выполнении сериализации и десериализации.
/// </summary>
/// <remarks>
/// В некоторых сценариях сериализованное представление экземпляра объекта может отличаться от его естественного вида.
/// Подобные ситуации могут происходить по разным причинам. Например, хранить данные объектов или передавать их по сети
/// удобно в одном виде, а обрабатывать - в другом. Либо способ хранения или обработки информации жестко определен одной
/// из сторон, что часто бывает при работе со сторонними пакетами или системами с жестко определенной структурой данных.
/// В таких ситуациях удобно иметь механизм, который позволяет прозрачно для разработчика делать преобразование одного
/// формата данных в другой и обратно. Для этих целей служит интерфейс <see cref="IMemberValueConverter" />, который
/// описывает правила преобразования значений свойств объектов из одного представления в другое и обратно при выполнении
/// операций сериализации и десериализации. На прикладном уровне необходимо реализовать интерфейс
/// <see cref="IMemberValueConverter" /> и зарегистрировать реализацию в контейнере зависимостей.
/// </remarks>
public interface IMemberValueConverter
{
/// <summary>
/// Проверяет возможность применения преобразования для указанного свойства.
/// </summary>
/// <param name="member">Информация о свойстве.</param>
/// <returns>
/// Значение <c>true</c>, если конвертер применим к указанному свойству, иначе - <c>false</c>.
/// </returns>
bool CanConvert(MemberInfo member);
/// <summary>
/// Преобразует указанное значение в значение для сериализации.
/// </summary>
/// <param name="value">Значение для преобразования.</param>
/// <returns>
/// Значение для сериализации.
/// </returns>
object Convert(object value);
/// <summary>
/// Преобразует указанное значение в значение для десериализации.
/// </summary>
/// <param name="value">Значение для преобразования.</param>
/// <returns>
/// Значение для десериализации.
/// </returns>
object ConvertBack(Func<Type, object> value);
}
}