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

Возможно ли иметь какой-то преобразователь типов, который позволяет 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"), и поэтому на стороне сервера происходит сбой при попытке проанализировать его в логическое значение.

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


person Audrius    schedule 29.04.2011    source источник
comment
@eugene приведение к bool не компилируется   -  person CodesInChaos    schedule 29.04.2011
comment
Почему бы просто не: "1".Equals(val) ?   -  person Andrey    schedule 29.04.2011
comment
@Eugene Преобразование происходит на стороне сервера и выполняется внутренними органами Sync Framework. Структура синхронизации. Я не имею никакого контроля над тем, как это делается.   -  person Audrius    schedule 29.04.2011
comment
У вас есть код, чтобы показать?   -  person Jonas Elfström    schedule 29.04.2011
comment
@ Джонас, не совсем, это связано не с существующим источником, а с тем, что логическое значение С# не может анализировать 0/1 как логические значения.   -  person Audrius    schedule 03.05.2011


Ответы (4)


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

person jdehaan    schedule 29.04.2011
comment
О, извините, я, кажется, совершенно неправильно понял, что проблема заключается в структуре синхронизации, с которой у меня почти нет опыта... - person jdehaan; 29.04.2011

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

Кажется, вам придется, так как в SQLite нет логического типа.

boolean active = cursor.getInt(column_idx)==1;
person Jonas Elfström    schedule 29.04.2011
comment
Но я действительно... действительно не хочу этого делать, так как это добавляет еще одно правило в книгу для всех разработчиков, которые собираются использовать эту библиотеку синхронизации. Кстати, это не проблема хранения логических значений в виде числового типа, это то, что используется на андроиде по умолчанию, но MS Sync Framework не любит преобразовывать 0/1 в false/true. Должно быть наоборот, используйте строку true/false на Android, а затем напоминайте разработчикам всегда преобразовывать эти значения в правильный логический тип. - person Audrius; 29.04.2011

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

person JuneT    schedule 01.05.2011
comment
Да, я пытался использовать это, но, к сожалению, перехватчик предоставляет только уже созданные объекты, и в этом случае он терпит неудачу, потому что объект не может быть создан в первую очередь (поскольку данные JSON не могут быть проанализированы). - person Audrius; 03.05.2011

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

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

person Audrius    schedule 03.05.2011