Проанализировать «0» / «1» как bool в (.NET 4.0 C #) Sync Framework 4.0 CTP

#.net #sqlite #data-synchronization

#.net #sqlite #синхронизация данных

Вопрос:

Возможно ли иметь какой-либо преобразователь типов, который позволяет Sync Framework обрабатывать строки «0» / «1» как логические значения для false / true. Согласно документации bool.parse, это не поддерживается по умолчанию, так что есть ли способ обойти это?

Более подробная информация на случай, если кто-то может предложить другой подход к этой проблеме: у меня есть пользовательская клиентская реализация Sync Framework для Android, и поскольку она использует базу данных SQLite, у меня нет возможности применить какой-либо строгий тип данных к полю таблицы. Я мог бы придумать соглашение для указания логического поля, скажем, с префиксом «Is», но это было бы неприятно. Другое дело, что логические значения в SQLite обрабатываются как числовой тип, таким образом, вставка / обновление логических значений false / true в базу данных SQLite автоматически преобразует их в 0/1, и я не хочу вводить какое-либо преобразование TRUE / FALSE = 1/0 на стороне Android.

Любые мысли приветствуются.

[ОБНОВЛЕНИЕ] Более подробная информация: Серверная часть состоит из некоторых служб, использующих Microsoft Sync Framework 4.0 CTP. Настраивать особо нечего, кроме создания области видимости и так далее. Клиентская сторона генерирует набор изменений и передает его на сервер, используя формат JSON. Набор изменений поступает из базы данных SQLite (а SQLite не имеет никакого собственного логического представления, кроме числового 0/1), поэтому при чтении базы данных нет указаний на то, что поступающие данные имеют логический тип. Значение поля сериализуется в объект JSON в виде строки с числовым значением («0» или «1»), и, таким образом, серверная сторона завершает работу с ошибкой при попытке преобразовать его в bool.

Кстати, это можно обойти, выполнив одностороннюю синхронизацию клиент-сервер. Я вручную установил тип поля сущности на стороне сервера в байт, и Sync Framework прекрасно использует его как «битный» тип базы данных. Этот обходной путь не работает для взаимодействия сервер-клиент, хотя.

Комментарии:

1. @eugene приведение к bool не компилируется

2. Почему бы просто не: "1".Equals(val) ?

3. @Eugene Преобразование происходит на стороне сервера, и оно выполняется внутренней частью Sync Framework. Платформа синхронизации . У меня нет никакого контроля над тем, как это делается.

4. У вас есть какой-нибудь код для показа?

5. @Jonas не совсем, это связано не с существующим исходным кодом, а с тем, как c # boolean не может анализировать 0/1 как логические значения.

Ответ №1:

Обычный способ в C # / .NET заключается в использовании Convert.ToBoolean()

Комментарии:

1. О, извините, я, кажется, совершенно неправильно понял, что проблема заключается внутри Sync framework, с которым у меня почти нет опыта…

Ответ №2:

Я не хочу вводить какое-либо преобразование TRUE / FALSE = 1/0 на стороне Android

Похоже, вам придется это сделать, поскольку в SQLite нет логического типа.

 boolean active = cursor.getInt(column_idx)==1;
  

Комментарии:

1. Но я действительно … действительно не хочу этого делать, поскольку это добавляет в книгу еще одно правило для всех разработчиков, которые собираются использовать эту библиотеку синхронизации. Кстати, это не проблема сохранения логических значений в виде числового типа, это то, что используется на Android по умолчанию, но MS Sync Framework не любит преобразовывать 0/1 в false / true. Должно быть наоборот, используйте строку «true» / «false» на Android, а затем напоминайте разработчикам, чтобы они всегда преобразовывали эти значения в правильный логический тип.

Ответ №3:

что касается битов Sync Framework, вы пробовали внедрять перехватчики для перехвата изменений и выполнения преобразования? смотрите: Как: Расширить бизнес-логику на сервере с помощью перехватчиков

Комментарии:

1. Да, я пытался использовать это, но, к сожалению, interceptor предоставляет только уже созданные объекты, и в данном случае это не удается, потому что объект не может быть сконструирован в первую очередь (поскольку данные JSON не могут быть проанализированы).

Ответ №4:

Таким образом, становится невозможным выполнить то, что я прошу, каким-либо простым способом. В конце я решил добавить дополнительные функциональные возможности в библиотеку синхронизации Android для анализа определений таблиц SQLite и использования описаний полей для форматирования исходящих данных синхронизации.

Спасибо вам всем за ваши усилия.