# serialization

Помогает агенту выбрать формат сериализации для .NET: схему вместо рефлексии, System.Text.Json с генераторами для JSON. Пригодится при проектировании API, обмена сообщениями и хранения событий.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 569 установок · ★ 1238
- Автор: Aaronontheweb
- Лицензия: MIT · policy=mirror · лицензия открытая, файл — в исходнике
- Исходник: https://github.com/Aaronontheweb/dotnet-skills/tree/HEAD/skills/serialization/SKILL.md
- Обновлён: 2026-10-11
- HTML: https://affpapa.org/nevibecode/skills/serialization

## Что делает

Скилл подсказывает агенту, какой формат брать под конкретную задачу. Для REST API — `System.Text.Json` с генераторами исходного кода, для gRPC — Protocol Buffers, для сообщений между акторами и кеша — MessagePack, для конфигурации и логов — обычный JSON. Есть отдельная таблица форматов, которых стоит избегать: `BinaryFormatter` из-за уязвимостей, `Newtonsoft.Json` по умолчанию из-за имён типов в полезной нагрузке, `DataContractSerializer` и XML.

Внутри — разбор схемной сериализации против рефлексивной по нескольким критериям: где хранится информация о типе, как устроено версионирование, совместимость на проводе, пригодность для AOT. Для Protobuf расписаны правила совместимости: новые поля добавлять с новыми номерами, старые номера держать в `reserved`, не менять типы полей и не переиспользовать номера. Для MessagePack показаны контракты через `[MessagePackObject]` и `[Key(n)]` и настройка `CompositeResolver` с генератором.

Отдельный раздел — переезд с `Newtonsoft.Json`: таблица соответствий атрибутов и API, поведение с приватными сеттерами и полиморфизмом. Помните, что `System.Text.Json` не поддерживает `$type` по умолчанию — дискриминаторы придётся задавать явно. Скилл не вызывается вручную, он подхватывается агентом, когда речь заходит о формате данных.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill serialization -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/serialization/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/serialization/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill serialization -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/serialization/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill serialization -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/serialization/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install Aaronontheweb/dotnet-skills serialization
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/serialization/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill serialization -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/Aaronontheweb/dotnet-skills --path skills/serialization
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/serialization/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill serialization -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/Aaronontheweb/dotnet-skills/tree/HEAD/skills/serialization/SKILL.md

## Когда брать
- выбрать формат сериализации для API, обмена сообщениями или хранения
- перевести проект с `Newtonsoft.Json` на `System.Text.Json`
- сделать сериализацию совместимой с Native AOT
- спроектировать формат на проводе так, чтобы старые читатели не ломались
- ускорить сериализацию, убрав рефлексию из рантайма

## Примеры запросов агенту
- Какой формат сериализации выбрать для сообщений между акторами в .NET?
- Помоги перейти с Newtonsoft.Json на System.Text.Json с генераторами исходного кода
- Нужна AOT-совместимая сериализация для gRPC-сервиса, что взять?

## Похожие
- [flutter-implement-json-serialization](https://affpapa.org/nevibecode/skills/flutter-implement-json-serialization.md) — скилл · 37400 установок
- [system-text-json-net11](https://affpapa.org/nevibecode/skills/system-text-json-net11.md) — скилл · 3100 установок
- [portable-text-serialization](https://affpapa.org/nevibecode/skills/portable-text-serialization.md) — скилл · 2900 установок
- [ue-serialization-savegames](https://affpapa.org/nevibecode/skills/ue-serialization-savegames.md) — скилл · 1100 установок
- [unit-test-json-serialization](https://affpapa.org/nevibecode/skills/unit-test-json-serialization.md) — скилл · 3800 установок
- [godot-save-load-systems](https://affpapa.org/nevibecode/skills/godot-save-load-systems.md) — скилл · 595 установок

Из того же набора: [aaronontheweb/dotnet-skills](https://affpapa.org/nevibecode/by/aaronontheweb/dotnet-skills.md) — 32 карточки

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
