Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datenübertragung mit JSON
Loofsy
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

Datenübertragung mit JSON

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 221

beantworten | zitieren | melden

Es wäre gut, wenn du etwas (gekürzten) Code und Beispiele für das JSON zeigen könntest.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.839
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Loofsy,
Zitat
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!"
private Nachricht | Beiträge des Benutzers
Loofsy
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

beantworten | zitieren | melden

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);
                }
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 2.000
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von T-Virus am .
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.
private Nachricht | Beiträge des Benutzers