Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 20 kwi 2024, o 01:51


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 23 lip 2016, o 17:40 
Offline
Użytkownik

Dołączył(a): 08 maja 2014
Posty: 61
Pomógł: 1

Witam wszystkich!

Na starcie powiem, iż jestem bardzo szczęśliwy. Do tego stopnia szczęśliwy, że aż muszę się z Wami tym podzielić.
Procuję teraz nad pewnym programem, kto wie ten wie. Potrzebuję w nim udostępnić możliwość stworzenia własnej formatki.
Zmagałem się już kiedyś z tym problemem, ale to olałem bo znalazłem inne rozwiązanie tamtego problemu. Dziś jednak nie mogłem
się bez tego obejść. Konkretnie chodzi o serializacje Windowsowych kontrolek takich jak Button, ComboBox etc..
Bardzo długo szukałem jakiegoś rozwiązania w sieci zarówno naszej polskiej jak i zagranicznej. Nie spotkałem się jednak z żadnym konkretem
który by opisywał: TAK MASZ ZROBIĆ I BĘDZIE DOBRZE. Zatem będę pierwszy. Być może jest ktoś, kto takie rozwiązanie znalazł, jeśli tak
to poproszę :)

Lecimy, na początku stworzyłem sobie baaardzo prostą klasę PropertyContainer.
Oto jej kod:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozwoliła mi ona na zapis podstawowych danych o właściwości.

Do serializacji naszych kontrolek będziemy musieli zaopatrzyć się w następujące biblioteki:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kod serializacji. Mam nadzieję, że ładnie opisany.
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kod deserializacji:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Następną rzeczą jaką się w tym zajmę, będzie serializacja Eventów kontrolek. Nie wiem czy mam dziś siły ale spróbuję.
Jeżeli mi się powiedzie, to chcecie?

Pozdrawiam serdecznie wszystkich użytkowników! Maciek :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2016, o 20:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

Tak Serializacja nie tylko w C# odgrywa często kluczową rolę w wielu funkcjach i usługach.
Oczywiście często niestety i ja jako developer muszę wykonywać niestandardową serializacje tylko po to by mieć pełną kontrolę nad procesami zarówno samej seroializacji jak i deserializacji.
I tu używanie standardowych procesów serializacji z .Net jest niewystarczające .

Zauważ że funkcja serializacji w .Net jest stosunkowo nowa , wcześniej jedyna metodą było
przechowywanie obiektów klasy poprzez przepisanie ich do strumienia , ale to rowiązanie choć proste ma 2 wady lub jak wolisz konsekwencje:

1. Trzeba napisać kod dla każdego obiektu , jeśli masz ich więcej zdefiniowanych jako typ zawierający kilka obiektów i robi się to wszystko zagmatwane ....
2. jesli chcesz wprowadzić zmiany do obiektów klasy to musisz tez zmienic kod przechowywania :)

ale wszystko znajdziesz w msdn :)

Pamiętaj o użyciu IDSerializationCallback bu przeliczyć obiekty zawłaszcza gdy zostaną rozszeregowane :) Oraz o odpowiednim doborze formatera obiektów BinaryFormatter i SoapFormatter :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2016, o 20:57 
Offline
Użytkownik

Dołączył(a): 08 maja 2014
Posty: 61
Pomógł: 1

Jak zatem dodać do klasy Button atrybut [Serializble]? ;)
Nie ma możliwości edycji klasy sealed takiej jak przykładowo Button.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2016, o 21:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

otóż to ,...
Dlatego wygodniej jest użyć metody niestandardowej serializacji realizowanej poprzez interfejs ISerializable. W tym interfejsie znajdziesz konstuktora metody GetObjectData()

....

:)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2016, o 21:23 
Offline
Użytkownik

Dołączył(a): 08 maja 2014
Posty: 61
Pomógł: 1

Nie korzystałem z tego interfejsu. Aczkolwiek wydaje mi się, że tą metodą którą przedstawiłem dało by się zserializować dosłownie wszystko dzięki bibliotece Reflection.
Do stworzenia obiektu danej klasy nie powinno mi być potrzebne nic oprócz jego właściwości. Metoda GetProperties() daje mi wszystko czego potrzebuję, w każdym przypadku.
Nie wiem jak z obiektami klas które nie mają publicznego konstruktora. Nie próbowałem za pomocą Activator.CreateInstance() tworzyć takiego obiektu. Ciekaw jestem co by z tego wyszło :D
Na przykład PropertyInfo. Nie da się napisać PropertyInfo pInfo = new PropertyInfo(). Nawet podczas tworzenia obiektu z publicznym konstruktorem, który
wymaga podania jakichś parametrów należy je podać za pomocą tablicy object[]. Jeżeli tego się nie zrobi to dostaniemy wyjątek "Nie odnaleziono konstruktora.. blablabla".



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2016, o 21:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

owszem standardowy mechanizm którego uzywasz jest ok , ale nie daje pełnej kontroli
i to może stanowić problem :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2016, o 21:54 
Offline
Użytkownik

Dołączył(a): 08 maja 2014
Posty: 61
Pomógł: 1

Czym jest pełna kontrola?
Chodzi o to, że kiedy na formatce np będzie Panel, który ma inne panele, które mają inne panele które mają GroupBoxy które mają inne kontrolki to to nie zadziała przy deserialziacji?
Nie wziąłem tego pod uwagę. Musze to od nowa przemyśleć. Chyba, że chodzi Ci o coś innego? :D Podpowiedz, chętnie postaram się to rozgryźć :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO