myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Klassen Properties verschwinden, Debug zeigt sie aber an.
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

geschlossen (weitere Infos)
Zum Ende der Seite springen  

Klassen Properties verschwinden, Debug zeigt sie aber an.

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Glowhollow Glowhollow ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 74


Glowhollow ist offline

Klassen Properties verschwinden, Debug zeigt sie aber an.

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich hab ein komisches Phänomen. Ich arbeite ja noch mit nem eigene JSON-Parser, die Deserialisierung habe ich im Netz gefunden. Teste ich das mit kleineren Daten, behält er die übergebenen Properties und speichert diese. Jedoch, beim debuggen, in der neueren Version befüllt der Deserialisierer die Properties, sobald ich jedoch in die nächste Zeile gehe (wo ich eigentlich nur den Inhalt ausgeben will, bekomme ich eine Null referenz).

Meine Vermutung liegt, das irgendwas mit dem eigenen Getter und Setter falsch läuft, weiß jedoch nicht warum.

Hier der Code.

C#-Code:
public class JSONObjects
{
public List<JSONObjectsvalues> result { get; set; }
}

[Serializable]
public class JSONObjectsvalues
{
...
private ResolvedBy myVar1;
public ResolvedBy resolved_by
{
  get
   {
     if (myVar1 == null)
      {
       myVar1 = new ResolvedBy();
       return myVar1;
      }
      if (String.IsNullOrWhiteSpace(myVar1.link) && String.IsNullOrWhiteSpace(myVar1.value))
      {
       myVar1 = new ResolvedBy();
       return myVar1;
      }
      return myVar1;
     }
      set { myVar1 = value; }
    }
}

C#-Code:
JSONObjectsvalues sourcecontents = new JSONObjectsvalues();

var content = readStringAndSplitInSections(tempString, startposition, context);
if (!endOfJSON)
{
var preparation= "{"+content+"}";

sourcecontents = preparation.FromJson<JSONObjectsvalues>();
var tmp = sourcecontents.resolved_by.link;
}

Interessanterweise wird resolved_by sobald ich den debug punkt auf sourcecontents habe, auch richtig befüllt, die daten sind da, die da reingehören.

Sobald ich jedoch mit dem Debugger einen step weiter gehe (1 zeile runter), sind die Werte nicht mehr befüllt.

Die variable tmp zeigt dadurch auf null.

Warum ?

Edit: Der Grund für die Abfrage, nach null bzw. leerstring ist nur deswegen der fall, weil ich hier das problem habe, das resolved_by statt link und value auch nur mal einen leerstring enthalten kann. Daher die Abfrage im Getter und Setter.

P.S. Der Deserialisierer funktioniert, vermute wiegesasgt, das das problem beim getter und setter liegt.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Glowhollow am 10.10.2018 12:53.

10.10.2018 12:48 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.170
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das löst man in NewtonSoft Json mit Hilfe des JToken.
Siehe  Wie eine List aus Objekten erstellen ?
10.10.2018 12:55 Beiträge des Benutzers | zu Buddylist hinzufügen
Glowhollow Glowhollow ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 74

Themenstarter Thema begonnen von Glowhollow

Glowhollow ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Lieber Abt, es ist schön, das das Newtonsoft mit dem JToken kann.

Das ist etwa so, als wenn ich fragen würde, warum fährt mein auto nicht und ich als antwort bekomme, das die anderen autos beim autohändler aber fahren können.

Das ist nicht die Lösung dieses Phänomens.

Wenn natürlich der JToken (was auch immer das sein mag), in dem Fall, das vergessen, der Properties löst, höre ich mir dazu gerne deinen Vortrag dazu an.

Im Anhang sieht man den Debugger-Output

Warum ist also der Inhalt, nach einer Zeile weiter im Code weg und zeigt auf null ?

Glowhollow hat dieses Bild (verkleinerte Version) angehängt:
hmm.gif
Volle Bildgröße

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Glowhollow am 10.10.2018 13:09.

10.10.2018 13:09 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.170
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das Grundproblem -  wie im anderen Thread bereits genannt - ist, dass Du irgendwas hinfrickelst, für das es etablierte Lösungen gibt.
Das hier wird so enden, wie so ein Fall i.d.R. endet: Du erfindest gerade das Rad neu, stolperst von einem Issue in das nächste und kümmerst Dich nun um einen Software-Teil, der nicht zu den Kernkompetenzen eurer Lösung gehört.

Du hast Dich mit Json nicht ordentlich beschäftigt, was jedoch Deine Pflicht ist.

Wann etwas null ist bzw. wird, das kann man alles im Debugger sehen - spätestens mit IntelliTrace oder eigenem Output.

Ich bezweifle auch, dass es dieses Phänomen gibt.
Es wird (vermutlich) einfach ein Problem mit Deinem Code sein. Im Code liegt meistens die Wahrheit.

Allein wenn man sowas hier sieht

C#-Code:
if (myVar1 == null)
      {
       myVar1 = new ResolvedBy();
       return myVar1;
      }
      if (String.IsNullOrWhiteSpace(myVar1.link) && String.IsNullOrWhiteSpace(myVar1.value))
      {
       myVar1 = new ResolvedBy();
       return myVar1;
      }
      return myVar1;
     }

schlägt doch jeder Alarm bzgl. Wert- und Referenztypen an.
 Werttypen und Referenztypen

Aber ich enthalte mich jetzt, wie gewünscht, Deinen Themen.
Manchmal muss man die Leute auch Fehler machen lassen, dass sie lernen :-)
10.10.2018 13:51 Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.594
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Anhand deines Code Snippets würde ich sagen, liegt es daran, dass tmp aus seinem Gültigkeitsbereich verschwindet und deshalb an der Stelle auch korrekt auf null zeigt.
Gehört aber zu den Grundlagen von C# und anderen Programmiersprachen, die Gültigkeitsbereiche nutzen.

Nachtrag:
Abt war schneller.
Im groben und Ganzen stimme ich Abt auch zu.
Du könntest dir einiges an Zeit sparen, einfach auf Newtonsofts JSON Parser umzusteigen.
Wenn du dir dort auch die Doku anschaust, mit JToken hat dir Abt auch schon im anderen Thread das Schlagwort geliefert, kannst du das mit etwas Code lösen.
Aktuell setzt du auf irgendeinen Code aus dem Netz und bastelst du irgendwas zusammen und andere sollen ohne zu wissen, was du dort verwendest, deine Fehler suchen.

So wirst du auf lange Sicht auch keine große Unterstützung im Forum bekommen, wenn du gute Ratschläge ignorierst und lieber eigene Lösungen bastelst.
Und anhand des aktuellen Codes kann nieman außer dir wirklich was mit dem Code anfangen oder dir explizite Gründe für Fehlverhalten oder Probleme nennen.

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 10.10.2018 13:57.

10.10.2018 13:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Glowhollow Glowhollow ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 74

Themenstarter Thema begonnen von Glowhollow

Glowhollow ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ok, danke für eure ratschläge. Wiegesagt, die etablierte version ist leider nicht anwendbar.

Aber ich habe herausgefunden woran es lag.

Ich hatte einen Funktionsaufruf von FromJSON etwas weiter oben im code, was dazu führte, das er diesen speziellen teil deserialisert hat, aber durch den 2. aufruf, obiges überschrieben hat.

Jetzt noch eine kleine Merge funktion bauen, die werte nach und nach eintrudeln lassen und am ende eine lösung haben.

vielen dank
10.10.2018 14:43 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.170
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Warum Du in einem Forum nach Ratschlägen suchst, wenn Du diese sowieso alle abwehrst und am Ende alles selbst besser weißt und die Welt neu erfinden willst; das bleibt Dein persönliches Geheimnis. verwundert

Zitat von Glowhollow:
Wiegesagt, die etablierte version ist leider nicht anwendbar.

Leider kann ich das so nicht stehen lassen; denn das ist - deutlich gesagt - gelogener Bullshit.

Das Problem ist nicht die Anwendbarkeit, denn die ist gegeben und ich hab  Dir auch erklärt wie das funktioniert (es ist ein Standard Json Fall), sondern einzig und allein Deine Beratungsresistenz.

Und mit dieser Haltung wirst Du auf immer und ewig schlechten, gammligen Code schreiben.
Auch Dein Code in  Copy Funktion verfeinern. gammelt von vorn bist hinten - Du schreibst wieder eine Framework Methode nach; die sogar fehlerhaft implementiert ist - schreibst aber "Viel Spaß mit dem Code".
Ich hoffe, dass niemand diesen Code je benutzt.
Mir tut wirklich jeder leid, der Deinen Code reparieren muss.
10.10.2018 19:18 Beiträge des Benutzers | zu Buddylist hinzufügen
Glowhollow Glowhollow ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 74

Themenstarter Thema begonnen von Glowhollow

Glowhollow ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Abt, nochmal, glaubst du wirklich ich würde mich über 1 Woche damit beschäftigen den newtonSoft JSON Deserialiser in unsere Software einzubauen.

Nochmal, das geht nicht, das ist auch unseren Chefprogrammierer auch nicht gelungen. Unsere Software ist damit einfach inkompatibel.

Frag mich nicht warum das so ist, ich habe flowster nicht entwickelt. Bedank dich da bei den Rumänen, die dafür verantwortlich sind. Ich bin nur vom deutschsprachigen Team.

Wir können diese Diskussion gerne weiter ausführen wenn du willst. Leider darf ich dir unsere Software nicht zukommen lassen und es gibt auch keine Testversion, sonst könntest du da das gerne selber ausprobieren.

Und zum Thema Beratungsresistenz. Ich bin nicht beratungsresistent, möchte aber jedoch mich weiterentwickeln, dazu gehört auch erst mal gammeligen Code zu schreiben.

Ich könnte jetzt natürlich auch 6-8 Semester studieren, bevor ich überhaupt eine Zeile Code geschrieben habe.

Aber ich vergesse ja, das ihr sowas natürlich noch nie hattet, und schon als Programmierer auf die Welt gekommen seid.

Tut mir leid, diese Argumentationskette kann ich so nicht stehen lassen.
11.10.2018 11:31 Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.202
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Glowhollow,

du wurdest im anderen Thread  Wie eine List aus Objekten erstellen ? schon darauf hingewiesen, dass es keine Rolle spielt, wo die Entwickler herkommen und dass Firmenprobleme die Lösung deines Problems keinesfalls beinflussen. Du hast ein Problem, dir wurde die Lösung mehrfach genannt. Jede Nationalität und firmeninterne Probleme haben damit nichts zu tun.

Gruss

Coffeebean
11.10.2018 14:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.170
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Glowhollow:
Bedank dich da bei den Rumänen, die dafür verantwortlich sind. Ich bin nur vom deutschsprachigen Team.

Das Thema grenzt mir zu sehr an eine Aussage, die rassistisch aufgesfasst werden kann.
Das akzeptieren wir hier nicht. Daher ist hier in Teamabsprache dicht. Fasse dies als persönliche Verwarnung auf.
11.10.2018 15:01 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
geschlossen (weitere Infos)


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 21.09.2020 10:25