
Vasily
08.04.2018
17:55:56
В тайпшейпе?

Evgeniy
08.04.2018
17:56:08
Да.

Vasily
08.04.2018
17:56:23
Тайпшейп это просто нашлепка для более удобного рефлекшна
Он идет по типу в порядке записи свойств

Google

Vasily
08.04.2018
17:56:43
А сам понимаешь, это немного ненадежно

Evgeniy
08.04.2018
17:57:04
Ок.
А какие проблемы, чтобы руками задавать маппинг?

Vasily
08.04.2018
17:57:24
Лень
Ну и подобного рода задачи я уже решал многократно
Хочется попробовать другой путь
В общем, хочется написать библиотеку общего вида, которая бы генерила сериализатор/десериализатор для заданного типа и выбранного формата
Например, NewtonSoft.Json использует внутреннее представление в виде JObject , из которого потом генерит класс/json

Evgeniy
08.04.2018
18:04:15
Привет!

Mykola
08.04.2018
18:08:20
взаимно ;)

Vasily
08.04.2018
18:09:04
Это неочевидно.
Ну смотри. Программист взял и в результате рефакторинга поменял расположение пропертей в описании типа и привет

Evgeniy
08.04.2018
18:09:53

Google

Vasily
08.04.2018
18:11:32
Осталось понять, как

Evgeniy
08.04.2018
18:12:14
И нужно сохранять его между версиями библиотеки.

Vasily
08.04.2018
18:14:13
Скорее библиотека должна предоставлять возможность задавать порядок

Evgeniy
08.04.2018
18:15:25

Vasily
08.04.2018
18:16:00
Порядок свойств?

Evgeniy
08.04.2018
18:16:13

Vasily
08.04.2018
18:16:29
т.е. список PropertyInfo, как я понимаю

Evgeniy
08.04.2018
18:16:36
У тебя благодаря рефлекшену есть информация о свойствах, нужно отсортировать каким-либо образом.

Vasily
08.04.2018
18:16:55

Evgeniy
08.04.2018
18:17:03

Vasily
08.04.2018
18:17:56
Ну предложенный тобой подход нормально работает, когда порядок сериализации можно задать любым

Evgeniy
08.04.2018
18:18:07
Если тебе не нужно думать о расширении типов с сохранением возможности десериализовывать старые версии, то любой заданный порядок должен подойти.

Vasily
08.04.2018
18:20:13
Нужно дать возможность устанавливать порядок, я бы так сказал

Evgeniy
08.04.2018
18:20:57
Ок. Тебе нужен какой-то точный, заданный руками порядок свойств?
Тогда атрибуты.
Это же не проблема. :)

Vasily
08.04.2018
18:21:51
Ну вот тоже прихожу к этому выводу

Google

Vasily
08.04.2018
18:22:15
Потому как всякие билдеры получаются довольно громоздкими
А так атрибутиками классик разметил и вперед
Судя по тому, что я хочу, воможно, мне нужны HKT
Но это неточно
:)
Проще на атрибутах намутить, конечно

Evgeniy
08.04.2018
18:28:46
В FsPickler не парятся и сортируют свойства по имени. :)

Pavel
08.04.2018
18:30:41

Vasily
08.04.2018
18:31:42
Ну снаружи будет тип приезжать, уже с атрибутами по идее
Кстати, в f# можно навесить констрейнт, что тип numeric?

Pavel
08.04.2018
18:37:31
что это за тип и куда констрейнт?

Evgeniy
08.04.2018
18:38:47

Vasily
08.04.2018
18:40:13

Pavel
08.04.2018
18:42:06
перегрузи мемберы на нужные типы по нужным правилам

Vasily
08.04.2018
18:43:11

Pavel
08.04.2018
18:44:14
type Numeric() =
static member Serialize(x : int, ...) =
static member Serialize(x : double, ...) =
static member Serialize(x : byte, ...) =

Vasily
08.04.2018
18:45:34
Хммм

Roman
08.04.2018
20:01:36

Evgeniy
08.04.2018
20:50:13
У Матиаса довольно неплохой доклад про CNTK и F#.

Google

Evgeniy
08.04.2018
20:50:35
Уже можно похайпить и что-нибудь простенькое запилить.
https://github.com/mathias-brandewinder/CNTK.FSharp
https://twitter.com/StachuDotNet/status/982980312710950914
Доброе утро.


??
09.04.2018
05:35:44
Доброе.
Ну хочется, например, написать функцию, которая сериализует только числовые значения по определенным правилам
Конкретнее задачу надо ставить или лучше описать абстракцию. Как вижу я: у вас есть класс (что конкретно не ясно, запись или нет), в нём есть типы значений и строки, значения будете писать в blob (важен порядок), а строки в json? То есть атрибут с порядком навешивается только на эти значения. Контруктор будет принимать как минимум 2 значения, если логика версии типа вынесена из него, это строка и byte[], которые оба будут парситься, json в строки, byte[] в значения. То есть вам нужна функция, которая будет возвращать нужный конструктор, который нужно будет применять к этому кортежу? Если важен порядок json, там похожая логика, но уже другой атрибут. Также, вы хотите, чтобы в зависимости от типа (свойства/поля?) там автоматически (на каком-то этапе) применялся один из соответствующих атрибутов, с указачением порядка и размером?


Vasily
09.04.2018
05:48:07
Есть объект.У него есть поля. Типы полей ограничены. Необходимо экземпляр объекта писать в бинарный поток по определенным правилам сериализации
Из нюансов - размер массивов задаётся разным количеством байт
Где-то слово, где-то два, где-то 4

??
09.04.2018
05:50:03

Vasily
09.04.2018
05:50:29
Машинное
8 байт

??
09.04.2018
05:52:19

Vasily
09.04.2018
05:54:48
Ну могут быть вложенные
Там довольно упоротый протокол

??
09.04.2018
05:55:25
Ну могут быть вложенные
Так вам надо сериализовывать простые типы (можно запихнуть в кортеж byte[] и json) или сложные?

Vasily
09.04.2018
05:55:28
Часть данных ещё зипуется

Pavel
09.04.2018
05:56:05
а через sql тайппровайдеры можно создавать, например, sqlite базу?
или как это вообще делается?

Google

Vasily
09.04.2018
05:56:30
Если под сложными ты имеешь в виду иерархию типов,то да

??
09.04.2018
05:57:16
И тогда встаёт вопрос как и в каком виде вы хотите это хранить.

Vasily
09.04.2018
06:01:20
В коде в виде иерархии классов

??
09.04.2018
06:01:52

Vasily
09.04.2018
06:02:11
В виде бинарного стрима же
Без сохранения информации о типе

??
09.04.2018
06:02:31

Pavel
09.04.2018
06:02:36

Vasily
09.04.2018
06:02:58

??
09.04.2018
06:03:03

Evgeniy
09.04.2018
06:03:15

Vasily
09.04.2018
06:03:32

Pavel
09.04.2018
06:03:33
т.е. по схеме можно сгенерить файлик?