Laden...

Datenübertragung mit JSON

Erstellt von Loofsy vor einem Jahr Letzter Beitrag vor einem Jahr 1.008 Views
L
Loofsy Themenstarter:in
32 Beiträge seit 2020
vor einem Jahr
Datenübertragung mit JSON

Hallo

Ich habe folgende Frage:

Ich möchte daten (Text) mittels JSON von meinem Client an einen Server Übertragen (funktioniert auch). Die Daten werden vor dem Versenden in ein Json Formatiert (funktioniert auch)
{"TEST":"datan"}

Der server empängt die anfrage und sendet diese jedoch ohne anführungszeichen zurück. Im meinem Fall wird der ankommende string einfach wieder nur zurückgeschickt.

Woran kann das liegen? Ich nutze C# und System.Text.Json.

Danke im vorraus

D
261 Beiträge seit 2015
vor einem Jahr

Es wäre gut, wenn du etwas (gekürzten) Code und Beispiele für das JSON zeigen könntest.

6.911 Beiträge seit 2009
vor einem Jahr

Hallo Loofsy,

System.Text.Json

Wie nutzt du das? Direkt od. indirekt via ASP.NET Core WebAPI*, etc.?
In den Serialisierungs-Optionen (Blick in die Doku) kann das Verhalten von Anführungszeichen eingestellt werden.

* statt Client/Server selbst zu erstellen ist es fast immer vorzuziehen ein dafür entwickeltes Framework zu verwenden um sich auf den Anwendungscode statt auf die Infrastruktur konzentrieren zu können

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

L
Loofsy Themenstarter:in
32 Beiträge seit 2020
vor einem Jahr

Hallo,

durch ein logging habe ich herrausgefunden, dass die daten zwar richtig an den server rausgehen jedoch der server die anführungszeichen entfernt.

der Folgende code ist der empfangsteil


public static void ReadCallback(IAsyncResult ar)
        {
            _serverOperate = new Process();
                String content = String.Empty;

                // Retrieve the state object and the handler socket  
                // from the asynchronous state object.  
                StateObject state = (StateObject)ar.AsyncState;
                Socket handler = state.workSocket;
                // Read data from the client socket.
                int bytesRead = handler.EndReceive(ar);

                if (bytesRead > 0)
                {
                    // There  might be more data, so store the data received so far.  
                    state.sb.Append(Encoding.ASCII.GetString(
                        state.buffer, 0, bytesRead));

                    // Check for end-of-file tag. If it is not there, read
                    // more data.  
                    content = state.sb.ToString();
                if (content.IndexOf("<EOF>") > -1)
                {
                    // All the data has been read from the
                    // client. Display it on the console.  
                    //Console.WriteLine("Read {0} bytes from socket. \n Data : {1}",
                    //    content.Length, content);
                    // Echo the data back to the client.  
                    try
                    {


                        _serverOperate.StartInfo.FileName = _operationAppPath;
                        _serverOperate.StartInfo.Arguments = "" + DBHost + ";" + DBName + ";" + DBUserName + ";" + DBUserPassword + ";" + content;
                        _serverOperate.StartInfo.UseShellExecute = false;
                        _serverOperate.StartInfo.RedirectStandardOutput = true;
                        _serverOperate.Start();
                        StreamReader reader = _serverOperate.StandardOutput;
                        string output = reader.ReadToEnd();
                        Application.Base.SysLogger.WriteLog(output, @"H:\Test.txt"); //Speichert den empfangenen json in eine textdatei
                        Send(handler, output);
                    }
                    catch(Exception err)
                    {
                        Send(handler, err.Message);
                    }

                }
                else
                {
                    // Not all data received. Get more.  
                    handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                    new AsyncCallback(ReadCallback), state);
                }

T
2.219 Beiträge seit 2008
vor einem Jahr

Also in dem Code wird nichts entfernt.
Da du auch mit einem Socket arbeitest und die Daten dort direkt ausliest, kannst du auch selbst sehen, dass dort nichts entfernt wird.
Hast du den Code mal debuggt um sicherzustellen, dass im Server die Daten auch richtig ankommen?

Ansonsten fehlt der Code zum senden.
Ebenfalls solltest du für asynchrone Verarbeitung am besten async/await verwenden.
Socket bietet die entsprechenden Async Methoden und in der Doku ist auch alles gut dokumentiert.

Nachtrag:
In deinem else Block macht es keinen Sinn erneut BeginReceive aufzurufen.
Hier läuft deine Verarbeitung bereits asynchron.
Damit schiebst du eine weitere asynchrone Verarbeitung an, was unnötig ist und auch einen neuen Thread benötigt.

Anbei zeig auch den Versand Code sowie den Teil wo du das Objekt serialisiert.
Ggf. ist dort noch was falsch!

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.