@Fsharp_chat

Страница 546 из 772
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
Это неочевидно.
Ну смотри. Программист взял и в результате рефакторинга поменял расположение пропертей в описании типа и привет

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
У тебя благодаря рефлекшену есть информация о свойствах, нужно отсортировать каким-либо образом.

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
что это за тип и куда констрейнт?

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
Хммм

type Numeric() = static member Serialize(x : int, ...) = static member Serialize(x : double, ...) = static member Serialize(x : byte, ...) =
Вот еще интересный вопрос, как быть с десериализацией с подобным подходом

Roman
08.04.2018
20:01:36
https://github.com/ionide/ionide-vscode-fsharp/issues/770 а во нашел
Put the ;; on the next line when sending code to FSI when there's a comment пофикшено в ionide от 29.03

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

Vasily
09.04.2018
05:50:29
Машинное

8 байт

?‍?
09.04.2018
05:52:19
Где-то слово, где-то два, где-то 4
Это один тип данных? То есть один класс, но внутри него поля-сслыки на int[]?

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
а через sql тайппровайдеры можно создавать, например, sqlite базу?
SQLite Базы делал ручками, но есть примеры, на метаните есть точно. https://metanit.com/sharp/wpf/19.1.php

Если под сложными ты имеешь в виду иерархию типов,то да
Вложенность сериализуется отдельно.

И тогда встаёт вопрос как и в каком виде вы хотите это хранить.

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
В виде бинарного стрима же
Один или парой блобов?

Vasily
09.04.2018
06:02:58
хочется в рантайме =\
SqlCommand в помощь

?‍?
09.04.2018
06:03:03
хочется в рантайме =\
Говорю же, там где-то есть примеры.

Evgeniy
09.04.2018
06:03:15
а через sql тайппровайдеры можно создавать, например, sqlite базу?
Провайдеры работают или с готовой базой, или со схемой.

Vasily
09.04.2018
06:03:32
Один или парой блобов?
Ну есть защищённый нетворк стрим

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

Страница 546 из 772