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

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

Повече подробности, в случай че някой може да предложи различен подход към този проблем: Имам персонализирана клиентска реализация на Sync Framework за android и тъй като използва SQLite база данни, няма начин да наложа някакъв строг тип данни в полето на таблицата. Бих могъл да измисля конвенцията за обозначаване на булево поле с, да речем, префикс "Е", но това би било гадно. Друго нещо е, че булевите стойности в 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 добре го използва като "битов" тип база данни. Това решение не работи за сървър към клиент.


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
@Jonas всъщност не, това не е свързано със съществуващия източник, а с това как c# boolean не може да анализира 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
Но аз наистина... наистина не искам да правя това, тъй като това добавя още едно правило към книгата за всички разработчици, които ще използват тази библиотека за синхронизиране. Между другото, не е проблем да се съхраняват булеви стойности като числов тип, това е, което се използва на android по подразбиране, но MS Sync Framework не обича да конвертира 0/1 в false/true. Трябва да е обратното, използвайте низ true/false на android и след това напомняйте на разработчиците винаги да преобразуват тези стойности в правилния булев тип. - person Audrius; 29.04.2011

за битовете на Sync Framework, опитвали ли сте да приложите Interceptors за прихващане на промените и извършване на преобразуването? вижте: Как да: Разширете бизнес логиката на сървър с помощта на Прехващачи

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

Така че изглежда не е възможно да направя това, което искам, по никакъв лесен начин. Накрая избрах да напиша допълнителна функционалност към библиотеката за синхронизиране на android, за да анализирам дефинициите на SQLite таблици и да използвам описания на полета за форматиране на изходящи данни за синхронизиране.

Благодаря на всички за усилията.

person Audrius    schedule 03.05.2011