WCF i przesyłanie obiektu TreeNode

0

Witam

Mam takie pytanie. Robię sobie program, który w pewnym momencie łączy się do usługi (serwera) WCF i wywołuje metodę zwracającą obiekt TreeNode. Obiekt ten zawiera strukturę (drzewiastą) plików i katalogów z konkretnego katalogu na dysku lokalnym usługi. Potem obiekt ten (TreeNode) chciałbym dodać sobie do TreeView.
Moje pytanie jest takie: czy można przesyłać obiekt typu TreeNode przy użyciu WCF? Pytam, ponieważ nagle projekt (klient) zaczął zgłaszać mi mnóstwo błędów przy obiektach TreeNode. Oczywiście błędy pojawiły się po wygenerowaniu (svcutil) i dołączeniu plików do projektu klienta, a nie widzę innej przyczyny takiego zachowania.

0

Sprawdź, czy da się ten obiekt serializowć, bo jeżeli nie jest to domyślnie możliwe, to musisz przygotować jakiś własny spozób serializacji i rozpakowania obiektu.

0
Osiołek21 napisał(a)

mnóstwo błędów przy obiektach TreeNode. Oczywiście błędy pojawiły się po

po zastosowaniu rady huberta, jesli nie pomoze Ci ona, przemysl, czy przypadkiem swiat nie jest tak dziwnie urzadzony, ze dobrze by Ci zrobilo doklejenie do tego watku logu z tymi bledami..

0

Oczywiście , że TreeNode nie jest serializowane :) Ale .Net sam sobie dorzucił serializację klasy TreeNode (mądra bestia) w przestrzeni nazw System.Windows.Forms i przez to przesłonił oryginalną klasę TreeNode i mój program zaczął sypać błędami bo, owszem widział klasę TreeNode, ale nie tą oryginalną tylko tą już serializowaną, a co za tym idzie nie widział tych wszystkich metod i atrybutów, z których sobie korzystałem. Postanowiłem zrobić swoją własną klasę serializowaną po stronie serwera MyTreeNode, która dziedziczy po oryginalnym TreeNode, ale tez pozwala serializować dane. Po wygenerowaniu klasy dla klienta przez svcutil znowu .Net sobie zaimplementował klasę TreeNode, prawdopodobnie przez to że klasa MyTreeNode dziedziczy po TreeNode i znowu błędy :( Skończyły mi się pomysły jak do tego podejść. Oczywiście można iść na okrętkę i dane wrzucać do innej struktury ale dobija mnie to że nie potrafię tego zrobić właśnie w prosty sposób, a za to muszę kombinować. Jeżeli wiecie jak obejść ten problem to proszę o sugestie.

0
class nieserializowalna //to jest nie Twoje, nie mozesz tego ruszyc ani zmodyfikowac
{
    public int blah {get;set;}
    public int bleh {get;set;}
    public int bloh {get;set;}
    public void metoda();
    public void medato();
    public void tomeda();
}

/*class czyserializowalna : nieserializowalna
{
    //nie chcialo Ci sie pisac i przepisywac, wiec sobie 'po'dziedziczyles
    //zeby Twoja klasa miala te same props & meths co oryginal
    //ale, ciekawe jak chcesz ją zserializowac, skoro jej BAZA nie nadaje sie do tego?!
    //zserializujesz PÓŁ OBIEKTU ?
}*/

class serializowalna //taka klase dasz rade zserializowac, bo jest Twoja
{
    public int blah {get;set;}
    public int bleh {get;set;}
    public int bloh {get;set;}
}

gdziekolwiek
{
    public static serializowalna pack(nieserializowalna orig)
    {
        tmp = new serializowalna();
        tmp.blah = orig.blah;
        tmp.bleh = orig.bleh;
        tmp.bloh = orig.bloh;
        return tmp;
    }

    public static void unpack(nieserializowalna target, serializowalna packed)
    {
        target.blah = packed.blah;
        target.bleh = packed.bleh;
        target.bloh = packed.bloh;
    }
}

i tak to wlasnie musisz zrobic i kropka. i miej nadzieje ze te dane ktore chcesz zserializowac (blah, bleh, bloh) sa serializowalne tak jak int'y. bo jezeli sa to zlozone obiekty... ;]

tak niestety wyglada serializacja rzeczy ktore sie do niej nie nadaja.
przemysl - moze zamiast upierac sie i serializowac treenode, moze moglbys raczej zapisywac ich key/parent/value i potem na tej podstawie odtwarzac drzewo? ano, albo sie na'pracujesz, albo sie na'myslisz, jak to w zyciu..

0

Dzięki "quetzalcoatl" za pomoc. Patrząc na to co napisałeś chyba jednak się namyślę :)

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1