SyncHub Docs
Shine
Shine
  • Shine
  • Message
    • Типы данных
Powered by GitBook
On this page
  • Поддерживаемые типы данных:
  • Примеры использования:
  • Особенности работы:

Was this helpful?

  1. Message

Типы данных

Поддерживаемые типы данных и примеры использования

Поддерживаемые типы данных:

  1. Примитивные типы:

    • bool, byte, sbyte, char, decimal, double, float, int, uint, long, ulong, short, ushort

  2. Специальные типы:

    • string

    • Guid

    • DateTime

    • TimeSpan

  3. Перечисления (enum):

    • Любые пользовательские enum

  4. Nullable-типы:

    • int?, bool?, DateTime? и т.д.

  5. Коллекции:

    • Массивы: int[], string[] и т.д.

    • List<T>, IList<T>, ICollection<T>, IEnumerable<T>

    • HashSet<T>, SortedSet<T>

    • Любые другие коллекции, реализующие IEnumerable

  6. Словари:

    • Dictionary<TKey, TValue>, IDictionary<TKey, TValue>, IDictionary

  7. Кортежи (ValueTuple):

    • (int, string), ValueTuple<int, string>

    • (int Id, string Name) - именованные кортежи

  8. Пользовательские объекты (DTO):

    • Любые классы или структуры с публичными свойствами


Примеры использования:

1. Примитивные типы и строки

// Отправка
var message = Message.Create()
    .Data(42) // int
    .Data("Hello World") // string
    .Data(3.14) // double
    .Build();

// Получение
int number = message.GetData<int>();
string text = message.GetData<string>();
double pi = message.GetData<double>();

2. Дата и время

// Отправка
var message = Message.Create()
    .Data(DateTime.Now)
    .Data(TimeSpan.FromMinutes(30))
    .Data(Guid.NewGuid())
    .Build();

// Получение
DateTime time = message.GetData<DateTime>();
TimeSpan duration = message.GetData<TimeSpan>();
Guid id = message.GetData<Guid>();

3. Перечисления

public enum Status { Active, Inactive }

// Отправка
var message = Message.Create()
    .Data(Status.Active)
    .Build();

// Получение
Status status = message.GetData<Status>();

4. Nullable-типы

// Отправка
var message = Message.Create()
    .Data<int?>(null)
    .Data<DateTime?>(DateTime.Now)
    .Build();

// Получение
int? value = message.GetData<int?>();
DateTime? time = message.GetData<DateTime?>();

5. Массивы и списки

// Отправка массива
var message = Message.Create()
    .Data(new int[] { 1, 2, 3 })
    .Build();

// Получение массива
int[] array = message.GetData<int[]>();

// Отправка списка
var message2 = Message.Create()
    .Data(new List<string> { "a", "b", "c" })
    .Build();

// Получение списка
List<string> list = message2.GetData<List<string>>();

6. Словари

// Отправка словаря
var message = Message.Create()
    .Data(new Dictionary<int, string> { { 1, "one" }, { 2, "two" } })
    .Build();

// Получение словаря
Dictionary<int, string> dict = message.GetData<Dictionary<int, string>>();

7. Кортежи

// Отправка кортежа
var message = Message.Create()
    .Data((42, "answer"))
    .Build();

// Получение кортежа
var (number, text) = message.GetData<(int, string)>();

8. Пользовательские объекты

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<string> Emails { get; set; }
}

// Отправка
var user = new User 
{ 
    Id = 1, 
    Name = "Alice", 
    Emails = new List<string> { "alice@example.com", "alice@work.com" } 
};
var message = Message.Create()
    .Data(user)
    .Build();

// Получение
User receivedUser = message.GetData<User>();

9. Вложенные объекты

public class Order
{
    public int Id { get; set; }
    public User Customer { get; set; }
    public List<Product> Products { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
}

// Отправка
var order = new Order
{
    Id = 1001,
    Customer = new User { Id = 1, Name = "Bob" },
    Products = new List<Product>
    {
        new Product { Id = 101, Name = "Book" },
        new Product { Id = 102, Name = "Pen" }
    }
};
var message = Message.Create()
    .Data(order)
    .Build();

// Получение
Order receivedOrder = message.GetData<Order>();

10. Сложные коллекции

// Отправка словаря со списками
var data = new Dictionary<string, List<Point>>
{
    { "line1", new List<Point> { new Point(1,1), new Point(2,2) } },
    { "line2", new List<Point> { new Point(3,3), new Point(4,4) } }
};

var message = Message.Create()
    .Data(data)
    .Build();

// Получение
var receivedData = message.GetData<Dictionary<string, List<Point>>>();

Особенности работы:

  1. Порядок свойств:

    • Свойства сериализуются в алфавитном порядке

    • Кортежи сериализуются по порядку полей

  2. Обработка null:

    • Строки: null длина -1

    • Ссылочные типы: записывается флаг наличия значения

    • Nullable<T>: отдельный флаг

  3. Ограничения:

    • Приватные поля не поддерживаются

    • Циклические ссылки не обрабатываются

    • Интерфейсы требуют явного указания типа при десериализации

PreviousMessage

Last updated 2 days ago

Was this helpful?