Oprettet tir. d. 31. januar 2012 kl. 00:50:59

ladefoged
ladefoged (17.450 point. Point ude: 0)

Object til list eller array

Jeg har efterhånden siddet fast længe med et problem i C# og det ser ikke ud til at jeg kommer en løsning ret meget nærmere uanset hvad jeg prøver.

Problemet er at jeg har et object med noget information i som jeg gerne vil kunne tilgå.

Objectet hedder "message", I kan se lidt info om objectet på http://simpelservice.dk/ (...)

Jeg har f.eks. prøvet med
List<string> messageList = List<string>message;

Men det giver heller ingen resultat, håber virkelig der er nogen af jer som kan give se hvad problemet er for synes efterhånden jeg har stigeret mig blind på problemet.

P.s. Sig endelig til hvis I har brug for mere af koden for at kunne se problemet.

Mvh Nikolai

Skrevet tir. d. 31. januar 2012 kl. 00:59:08| #1

buzzzz
buzzzz (48.826 point)
ifyoudo.net
List<string> messageList = (List<string>)message;

Skrevet tir. d. 31. januar 2012 kl. 08:55:38| #2

Tylon_Foxx
Tylon_Foxx (975 point)
Kinne være dejligt med mere forklaring af koden, for kan slet ikke se hvad objectet i det hele taget skal være

er objectet en tekstreng fra et andet sted i programmet?
i så fald, hvorfor er det ikke en string i forvejen?
hvor initialiserer (new'er) du din liste?
hvilke fejl får du?

det er selvfølgelig en mulighed at caste objectet til en list som buzzzz skriver...

men som sagt, mere kode kan være en hjælp :)

Skrevet tir. d. 31. januar 2012 kl. 21:23:45| #3

ladefoged
ladefoged (17.450 point)
buzzzz det virker desværre heller ikke og jeg får ikke nogen fejl meddelser så det er lidt svært at gætte hvad problemet er.

Jeg smider lige lidt mere kode med så det forhåbentligt giver lidt mere mening for jer

Programmet jeg er ved at lave skal samarbejde med PubNub.com mere specefikt deres C# api https://github.com/ (...)

Den originale funktion fra deres eksempel er
pubnub.Subscribe(
        "hello_world", // Channel Name
        delegate (object message) {
            Console.WriteLine(message); // Print Received Message
            return true;                // Keep Listening?
        }
    );

Min tilpassede funktion
pubnub.Subscribe(
    "ifc0nfig",
    delegate(object message)
    {
        changeLED(message);

        return true;
    }
);


Her under Pubnub klassen skåret ret meget ind til benet

public class Pubnub {
    public delegate bool Procedure(object message);
   
    /**
    * Subscribe
    *
    * This function is BLOCKING.
    * Listen for a message on a channel.
    *
    * @param string channel name.
    * @param Procedure function callback.
    */
    public void Subscribe( string channel, Procedure callback ) {
        this._subscribe( channel, callback, 0 );
    }
}

Her under koden der har med changeLED at gøre
public void changeLED(object message)
{
    //Det er denne linje som ikke virker
    pubNubMessage pubNubMsg = JsonConvert.DeserializeObject<pubNubMessage>(message);

    if (pubNubMsg.test == "asdasd564sdf64sd")
    {
        if (pubNubMsg.state)
        {
            MessageBox.Show("ON");
        }
        else
        {
            MessageBox.Show("OFF");
        }
    }
}
       
public class pubNubMessage
{
    public string test;
    public bool state;
}

Skrevet tir. d. 31. januar 2012 kl. 21:31:50| #4

buzzzz
buzzzz (48.826 point)
ifyoudo.net
Så er "message" ikke en liste.

Men kan du ikke lige finde ud af hvad Type object er?

break point, mouse over og så burde du kunne se typen.

Hvis det er json kan du ikke lave en ToString på det og se værdien.

Kan du fortælle mig hvad "Ikke virker" betyder? Det er et utroligt godt eksemple på at vi helt sikkert mangler MASSERE af information for at kunne hjælpe dig.

Tænk på den her. "Min bil virker ikke" ... hvad ville du så tænke? Der kunne jo være 10000000000000 ting galt ... og en så simple ting som at den mangler diesel/benzin :-)

Skrevet tir. d. 31. januar 2012 kl. 21:33:34| #5

buzzzz
buzzzz (48.826 point)
ifyoudo.net
Hvis du kigger på den ... så er det en Dictionary og derfor burde du kunne caste den til:

var dict = (Dictionary<string, string>)message;

Men hvis du ingen runtime eller compile fejl får ... så er der mere du ikke fortæller os :-)

Skrevet tir. d. 31. januar 2012 kl. 22:49:54| #6

ladefoged
ladefoged (17.450 point)
Hej igen buzzzz og tak for din humoristiske og meget overbærende måde at håndtere en tosse som mig på ;)

Med hensyn til typen må det være en System.Collections.Generic.Mscorlib_Dictionry som vist her http://simpelservice.dk/ (...) hvis jeg ikke er helt skæv på den.

Men når jeg prøver at bruge
var dict = (Dictionary<string, string>)message; som du skriver så ender dict = null (http://simpelservice.dk/ (...))

Jeg får fejl når jeg køre eksemplet ovenfor, pga. at message er et obejct og JsonConvert forventer en string, skrev koden på den måde for at illustrere hvad jeg gerne ville, men det fejlede hvis ;)

Her er en lille video som skulle forklare lidt om hvilke object det er http://screencast-o-matic.com/ (...) håber den giver dig/jer lidt flere idéer, for må nok indrømme det er russisk for mig.

Skrevet tir. d. 31. januar 2012 kl. 23:02:24| #7

buzzzz
buzzzz (48.826 point)
ifyoudo.net
Hvem siger du skal laves som du gør? Hvor har du den kode fra?
Men udover det, så er der flere ting der tænder alarm klokker ved mig.

public class pubNubMessage
{
    public string test;
    public bool state;
}

Du har ingen af overstående i din Dictionary. Du har en "text" som inderholder "key" ... så mon ikke du skulle rette den i overstående.

Udover det, så bruger du fields og ikke properties. Ved ikke om
den JsonConverter kan finde ud af det.

Jeg ville nok lave den her lidt om og overholde et par code conventions mht til navngivning.
public class PubNubMessage // Alle klasser bør navngives med http://en.wikipedia.org/ (...) i .NET
{
    public string Text {get; set;}// samme gælder properties.
    public bool state{get; set;}
}

Har du virkelig ikke mere information du kan give os?

Skrevet tir. d. 31. januar 2012 kl. 23:38:35| #8

ladefoged
ladefoged (17.450 point)
Jeg tager den lige forfra.

Målet er at få en besked fra PubNub.com ind i et C# program.
Beskeden som sendes fra PubNub for at teste er {"besked":"Hej eksperten"}

Nedenstående kode giver ingen fejl men der kommer heller ingen MessageBox frem, så min første indskydelse var at beskeden fra PubNub slet ikke kom ned til mit program, men det gør den godt nok som I kan se her http://screencast-o-matic.com/ (...)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Web.Extensions;
using Newtonsoft.Json;
using System.Collections;

namespace PubNub_Test_2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Pubnub pubnub = new Pubnub(
            "pub-************",
            "sub-************",
            null,
            false
        );

        private void button1_Click(object sender, EventArgs e)
        {
            if (!backgroundWorker1.IsBusy)
            {
                backgroundWorker1.RunWorkerAsync();
            }

        }

        public void modtagBesked(object message)
        {
            pubNubMessage pubNubMsg = new pubNubMessage();

            pubNubMsg = (pubNubMessage)message;

            MessageBox.Show(pubNubMsg.besked);
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            pubnub.Subscribe(
                "ifc0nfig",
                delegate(object message)
                {
                    modtagBesked(message);

                    return true;
                }
            );
        }
    }

    public class pubNubMessage
    {
        public string besked {get; set;}
    }
}

I korte træk er mit problem at jeg ikke kan få informationen fra message objektet over i mit pubNubMessage objekt så jeg kan tilgå informationen.

Kildekoden i PubNub klassen kan ses her https://github.com/ (...)

Skrevet tir. d. 31. januar 2012 kl. 23:51:31| #9

buzzzz
buzzzz (48.826 point)
ifyoudo.net
Jeg forstår ikke den ikke giver en Runtime fejl når du caster dit object til pubNubMessage ... giver ingen mening.

Men er du sikker på du ikke skal lave en convert af det json med Newtonsoft?

Ville være nemmere at debug hvis du lige pakkede koden og smed det op et sted. Der må ske et eller andet mærkeligt.

Skrevet tir. d. 31. januar 2012 kl. 23:52:51| #10


Skrevet tor. d. 02. februar 2012 kl. 20:20:19| #11

ladefoged
ladefoged (17.450 point)
Så lykkedes det at finde en løsning. Buzzzz vil du smide et svar for  selv om du ikke kom med den endelige løsning, fik du skubbet mine tanker i den rigtige retning.

Den endelige løsning blev

public void modtagBesked(object message)
{
  var json = new JavaScriptSerializer().Serialize(message);
  pubNubMessage pubNubMsg = new pubNubMessage();
  pubNubMsg = new JavaScriptSerializer().Deserialize<pubNubMessage>(json);

  MessageBox.Show(pubNubMsg.besked);
}

Om det så er overkill ved jeg ikke, men for nu er det en godkendt løsning :)

Skrevet tor. d. 02. februar 2012 kl. 23:30:52| #12

buzzzz
buzzzz (48.826 point)
ifyoudo.net
svar.

Overstående giver ingen mening. Sikker på du ikke kan lave en kopi af dit projekt med de information/dll's jeg skal bruge.

Overstående skriger om at der er noget galt.

Jeg kan dog ikke lige helt regne det ud.

Skrevet tor. d. 02. februar 2012 kl. 23:30:58| #13


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Print fra Windows Service på Win2008

Oprettet den 24. maj 2012 kl. 11.17
jps6kb giver 200 point for svar | Giv et svar »

Udskrive en Breadcrumb (Jeg er her >>)

Oprettet den 18. maj 2012 kl. 12.04
Qbruger giver 200 point for svar | Giv et svar »

Hjælp til at lokalisere fejl i CMS (synkron.via) dll

Oprettet den 16. maj 2012 kl. 19.31
jokkejensen giver 200 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger