Dostęp do pól_obiektu zwracanego przez interfejs XML_RPC

Odpowiedz Nowy wątek
2011-09-22 07:57
SmoQ
0

Witam

Mam następujący problem. Pobieram obiekty z serwera za pomoca interfejsu XML-RPC w C# gdy są to typy proste jak INT nie mam żadnego problemu natomiast gdy funkcja zwraca strukture nie potrafie sobie z tym poradzic.

Znam budowe struktury , tworzę ja w swojej aplikacji :

struct base_stations
{
public string type;
public string from;

     map[] map;

 }

Obiekt otrzymuję w ten sposób :

object t = proxy.session_receive(session, 0);

Próbowałem rzutowania :

base_stations eb new base_stations(); ;
eb = (base_stations)t;

Błąd o braku możliwośc rzutowani w taki sposób

lub

base_stations eb; ;
eb = t as base_stations;

gdy próbuje sie dostac do właściwości w niżej podany sposób wyrzuca mi bład iż obiekt nie istnieje tylko ,że obiekt t istnieje widzę nawet w debugerze ze pola sa zapisane .

MessageBox.Show(t.GetType().GetProperty("from").GetValue(t, null).ToString())

W C# nie moge sie do tego dostac interfejs jest ok w Pythonie wszystko działa poprawnie oczywiście.

Pozostało 580 znaków

2011-09-22 08:13
0

a coś takiego?

base_stations t = (base_stations)proxy.session_receive(session,0);

poza tym podawaj dokładne komunikaty o błędach

Pozostało 580 znaków

2011-09-22 20:53
SmoQ
0
Azarien napisał(a)

a coś takiego?

base_stations t = (base_stations)proxy.session_receive(session,0);

poza tym podawaj dokładne komunikaty o błędach

Efekt Twojej propozycji -> error :"Nie można rzutować obiektu typu 'System.Object[]' na typ 'XmlRpcClient.base_stations'."

Error w przypadku wykorzystania :

object t = proxy.session_receive(session, 0);
if (t != null)
{

                    MessageBox.Show(t.GetType().GetMembers()[0].GetType().GetProperty("from").GetValue(t,null).ToString());
                }

-> error : "Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu."

Pytanie czy da sie to obejsc bez rzutowania .

Pozostało 580 znaków

2011-09-22 20:59
0

nigdy tego nie robiłem, ale skoro

proxy.session_receive(session,0);

zwraca Object[]
to może spróbuj

base_stations[] s = (base_stations[])proxy.session_receive(session,0);

albo jakoś przeiterować po tej kolekcji?

Pozostało 580 znaków

2011-09-24 17:30
SmoQ
0

Udało mi sie otzymac prawidłowo strukturę zamapowelm to na XmlRpcStruct, Mrozu możesz rozwniac temat w jaki sposób przeiterowac po object[] ?

Pozostało 580 znaków

2011-09-25 00:49
0
SmoQ napisał(a)

w jaki sposób przeiterowac po object[] ?

Nie wiesz co to jest iteracja? o.O


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-09-25 01:09
SmoQ
0

O dziwo wiem czym jest iteracja :) tylko jak przejrzec kolekcje , stworzyc enumerator dla ogołnie zwracanej formy object[] poniewaz ani rzutowani na "moja " strukture nie wchodzi w gre , wykorzystanie refleksji i sprawdznei pól przez refleksje System.Reflection.FieldInfo[] tez w tym przypadku sie nie sprawdza stad moje pytanie

może tak: <code>foreach(base_stations bs in s) { ... }</code> - angel2953 2011-09-25 15:04

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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