Laden...
G
Benutzerbeschreibung
Benutzer auf eigenen Wunsch gesperrt.

Forenbeiträge von Glowhollow Ingesamt 74 Beiträge

11.10.2018 - 11:31 Uhr

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.

10.10.2018 - 18:22 Uhr
 public void CopyValues<T>(ref T target, T source)
        {
            Type t = source.GetType();

            var properties = t.GetProperties().Where(prop => prop.CanRead && prop.CanWrite);

            foreach (var prop in properties)
            {
                if (prop.PropertyType.IsValueType || prop.PropertyType == typeof(string))
                {
                    var value = prop.GetValue(source, null);
                    if (value != null)
                    {
                        prop.SetValue(target, value, null);
                    }
                }
                else
                {
                    var sourceValue = prop.GetValue(source, null);
                    var targetValue = prop.GetValue(target, null);

                    if (targetValue == null)
                    {
                        targetValue = Activator.CreateInstance(sourceValue.GetType());
                    }

                    CopyValues(ref targetValue, sourceValue);

                    prop.SetValue(target, targetValue);
                }
            }
        }

das wars. Viel Spass mit dem Code.

10.10.2018 - 17:49 Uhr

Machmal denke ich echt, ich spreche eine andere Sprache 😃.

Nun, ich bin ja fast fertig mit dem Deserializer.

Aber, ich habe noch folgendes Problem. Achtung Wall of Text.

Die CopyFunktion, kopiert alles so wie ich es brauche, nicht rekursiv, das ist hier auch nicht notwendig. Das einzige was ich jetzt noch zum Abschluss brauche ist es zu prüfen, ob beim Deserialisieren (was in kleinen schritten passiert), Werte vorhanden sind.

So soll im Target, werte stehen, die von der Source kopiert werden. Richtig. Die Source sind aber nur elemente, werden aber jedoch komplett in der ganzen bandbreite deserialisiert. Das heißt, das ich im Target nur die Werte haben möchte, die auch deserialisiert sind. Da Source, aber abgesehen von einem einzelnen Restschritt, jeweils nur 1 Wert drin steht. Ist es so, das die anderen Werte auf null sind.

Diese sollen nicht kopiert werden. Das macht die Copy Funktion aber auch.

Jetzt ist es aber so, das der Bereich, in dem es zu einem Datensatz, mehrere werte gibt. In diesem fall, z.bsp. content.link und content.value, ist ja content gesetzt. jedoch sind die werte link und value auf null.

Jetzt erkennt die Copy Funktion das, sieht, content ist nicht null, und kopiert fröhlich drauf los und überschreibt mir die hart erarbeiteten Ergebnisse.

Das möchte ich verhindern. Am liebsten wäre mir eine if abfrage mit der ich prüfen kann, ob .... . link und .... value (es gibt da n ganzen satz von) jeweils null sind.

Ich würde ja gerne sowas in c#-konformer Syntax realisieren.

if (value != null && value.category.subcategory == null)

Aber irgendwie finde ich nicht die passenden Worte für.

10.10.2018 - 16:38 Uhr

Ja, der nervige hier 😉 bin wieder da 😄

Ich habe eine Copy Funktion.


public void CopyValues<T>(T target, T source)
        {
            Type t = typeof(T);

            var properties = t.GetProperties().Where(prop => prop.CanRead && prop.CanWrite);

            foreach (var prop in properties)
            {
                var value = prop.GetValue(source, null);
                if (value != null)
                    prop.SetValue(target, value, null);
            }
        }

Die Properties werden gut kopiert, kein thema. Jetzt habe ich aber Properties die 2 Subproperties beinhalten können.

In unserem Beispiel nennen wir sie jetzt content.link und content.value.

Jetzt ist es ja hier nicht zu unterscheiden ob content.link und content.value ungleich null sind.

Gibts dafür nen lösungsansatz ?

10.10.2018 - 14:43 Uhr

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 - 13:09 Uhr

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 ?

10.10.2018 - 12:48 Uhr

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.


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; }
    }
}


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.

09.10.2018 - 15:49 Uhr

nochmal. Ich würde den JSON-Parser von newton soft wirklich wirklich gerne nutzen (nutze diesen auch privat). Werde jedoch nicht meine Kompetenzen überschreiten und die Arbeit niederlegen, weil die Implementation mit unserer Software nicht funktioniert.

Mehr muss ich hoffentlich nicht mehr dazu sagen, ok ?

@Pinki, genau das ist es. Der JavaScript-Deserializer, ist ja funktionsfähig, für alle anderen JSON-Values kann ich den ja auch nutzen. Und wiegesagt, es ist nicht so, das ich nicht versucht habe, das Problem über die getter und setter abzufangen. Wenn ich das mache, bekomme ich ne Fehlermeldung vom Deserializer, das irgendwas mit dem Index nicht stimmt. Ich habe diesen nicht programmiert und daher leider keine Ahnung, wo es da hakt. Ist auch schlecht an den Quellcode ranzukommen.

Daher habe ich im Netz einen kleinen, Parser gefunden, den ich auch schon miteingebaut habe.


Ich werde später in dem Thread, nochmal auf die ToList geschichte eingehen, falls mir da was unklar ist. Melde mich später

09.10.2018 - 15:23 Uhr

Auf die Anklagebank mit ihm ! 😉

Um die Frage zu klären.

Wir haben eine eigene Automatisierungssoftware (flowster), mit der man sich Arbeitsabläufe zusammenstöpseln kann. Je nach Anwendungsfall, gibts dafür spezielle aktivitäten. Die sind C# geschrieben und werden über eine Bibliothek nachgeladen.

Warum auch immer unser rumänisches Entwicklerteam es nicht geschafft hat, den Newtonsoft Json Parser funktionabel in dieses Programm einzubauen, entzieht sich leider meiner Kenntnis.

Fakt ist aber, ich habe hier eine REST-Api, welche ich auslesen muß und für den weiteren Gebrauch aufarbeiten muß.

Da der JavaScriptSerializer z.Bsp. nicht eigenständig auflösen kann, weil der Parser damit ein Problem hat, wenn in einem Array, 2 Properties in einem Array unerwartete Ergebnisse liefert, in unserem Fall einen Leerstring (also statt: "sys_domain":{"link":"https://dev63125.service-now.com/api/now/table/sys_user_group/global","value":"global"} nur "sys_domain":"") und dies auch nicht durch bearbeitung der für diesen speziellen Fall, sys_domain, und deren getter und setter nicht zum erfolg führt, ist es nun mal so, das ich das manuell machen muß.

Mir ist klar und durchaus bewußt, das das unsere Software können sollte. Da ich aber, da nichts zu sagen habe, sondern nur einer von 3 Entwicklern bin (die Rumänen müßten so an die 20+ sein) - lassen die sich da nicht reinreden. Irgend ein assembly problem, hab ich am rande mitbekommen, aber insofern nicht mein problem.

Zudem war ich 4 Wochen nicht da, also ich bastel nicht seit 4 wochen rum, sondern hab das ganze 4 Wochen ruhen lassen.

**@Abt ** Magst du mir das bei der .NET Serialisierung bei JSON, mich etwas erleuchten ?

Ich habe noch für Abschnitte des einfachen "JSON" String, den JavaScript deserializer. Der funktioniert hier auch soweit ganz gut. Oben besagtes Problem, macht es aber nicht einfacher, und so muß ich die die Parts, welche nicht gefressen werden, über eigene Funktionen miteinbauen.

Soweit kein Problem.

P.S. Unser Chefentwickler, hat sich schon tierisch mit dem rumänischen Entwicklerteam gestritten, da wir aber intern, zwar uns in diese Software eingekauft haben, sind uns jedoch die Hände gebunden, was die generelle Entwicklung anbetrifft (btw. Flowster ist noch nicht final).

09.10.2018 - 14:09 Uhr

Hallo T-Virus,

um deine Frage zu beantworten. Ja ich würde sehr gern den NewtonSoft Parser verwenden. Leider ist dieser mit unserem verwendeten Programm inkompatibel und der JavaScriptSerializer der von C# von haus angeboten wird, kommt mit einer bestimmten Konstellation an Input nicht klar.

Von daher muß ichs selbst bauen (bin da aber schon sehr weit fortgeschritten), muß nur noch die Objekte in eine List überführen, dann steht das schon mal.

09.10.2018 - 12:27 Uhr

Hallo,

ich bastel ja noch ein bischen, an dem JSON-Parser rum, und habe auch in dieser Struktur sowohl Arrays als auch eine vielzahl von Objekten, welche im Array im JSON-String sortiert sind.

Nun möchte ich, um es effektiv ansprechen zu können, dieses Array aus Objekten in eine List überführen.

Ist das auch der richtige Weg, gibt es bessere Optionen ?

Wenn es eine List ist, wie greife ich dann z.bsp. auf Properties z.bsp. aus dem Array[1] des Objekts zu ?

Kann mir hier jemand nen kurzen Überblick geben, was das effektivste ist ?

Edit: Ihr braucht mir jetzt keine Codebeispiele posten, ein grober Überblick genügt

07.10.2018 - 09:48 Uhr

ich hab zwar etwas programmiererfahrung, aber würde mich da gerne anschließen.

mfg

04.10.2018 - 22:24 Uhr

womit willst du anfangen ?

01.10.2018 - 12:54 Uhr

Hi, hierbei handelt es sich um einen Access Modifier.

Public bedeutet, das im Prinzip dein Code, jederzeit von überall auf diese Funktionen, Variablen zugreifen kann.

Protected bedeutet, das die Funktion, bzw. Variable nur innerhalb des spezifizierten Codeblocks drauf zugreifen kann (habe im moment nicht die richtigen wörter für), bzw. innerhalb der selben Klasse.

Private bedeutet, das keine Programmteile darauf zugreifen können, nur über getter- und setter- Funktionen. (was aber im private code enthalten ist).

Fragen soweit ?

18.09.2018 - 15:20 Uhr

Du meinst aber jetzt nicht den Serverpath ?

06.09.2018 - 12:58 Uhr

Hallo. Vielleicht sollte ich mich hier entschuldigen. Obwohl das nicht meine Absicht war hier irgendjemand zu beleidigen. Ich habe Abt per pm meine privat situation erläutert und hoffe das er sich meiner in irgendeiner Form annimmt und vermittelt.

Ich bezog mich - vielleicht war der threadtitel falsch gewählt- auf das Properties Problem. Was sich für euch erst mal zweitrangig klassifiziert wurde und dadurch das Gespräch sich in eine andere Richtung verschob.

Ich habe halt noch nicht das expertenwissen mich da so klar auszudrücken das es allgemeinverständlich ist. Sorry nochmal.

04.09.2018 - 15:00 Uhr

Th69, nimms mir bitte nicht übel. Ich habe in Zusammenarbeit mit unserem erfahrenen Entwickler die Optionen mit dem JavaScriptDeserialisierer ausgelotet. Er ist für diese Zwecke nicht zu gebrauchen.

Ich weiß jetzt auch nicht warum wir Dinge besprechen müssen, die mit der Frage wenig zu tun hat.

Wenn ich eine andere Lösung hätte, hätte ich diese auch verwendet, ja auch ich bin faul.


public void CopyValues<T>(T target, T source)
{
    Type t = typeof(T);

    var properties = t.GetProperties().Where(prop => prop.CanRead && prop.CanWrite);

    foreach (var prop in properties)
    {
        var value = prop.GetValue(source, null);
        if (value != null)
             prop.SetValue(target, value, null);
    }
}

das wäre übrigens ein Lösungsansatz gewesen. Aber danke.

04.09.2018 - 14:22 Uhr

Danke für die Frage. Unsere eingesetzte Software kann leider mit dem newtonSoft nicht zusammenarbeiten (warum auch immer). Ich habe die vorgabe, das nicht zu nutzen.

Und ergänzend sei dazu gesagt, das der JavaScriptDeserializer nicht verwendbar ist, da ich je nach zurückgegebenem JSON-String, manche Properties (die aus Klassen bestehen, die eigene Properties haben) (als beispiel Json-String " {"content":{"link":"value", "wert2","value"}}) die aber auch mal ein leerstring seinen können.

Da eine Abfangen über den getter und setter im JavaScriptSerializer nicht möglich hist, mußte ich sozusagen das ganze in Eigenregie entwickeln.

04.09.2018 - 13:47 Uhr

Hallo,

ich habe Einen Deserialisierer eines JSON Strings gebastelt, habe hier jedoch ein kleines Problem.

Der JSON String, wird je nach Typ in verschiedene Substrings zerlegt, welche mit einer FromJSON Methode an die entsprechende Klasse per getter und setter mit Werten befüllt.

Diese FromJSON Methode wurde von einem JSON Parser übernommen, er befüllt zuverlässig, die verknüpfte Klasse per getter und Setter mit Werten.

Die Properties sind auch über eine Foreach schleife auslesbar.

Da aber, aufgrund der Komplexität, ich den JSON String, je nach Struktur iterieren muß und das ganze übergebe an FromJSON kommt es dazu, das keine Möglichkeit habe, die Klasse "in einem Schwung" mit werten zu befüllen.

So splittet sich meine "Befüllungsmethode" in 3 unterparts, welche jeweils einzeln in die dafür gesehene Klasse schreiben würde.

Ich habe das Problem, das ich (man möge mir hier vielleicht meine Wortwahl verzeihen, da ich im Moment nicht 100% akkurat die Bezeichnung dafür habe) - die Properties an 3 unterschiedlichen Stelle befüllen, aber der Enumerator, bei der Abfrage, ja jeweils nur auf ein Objekt referenziert.

Dort besteht das problem, das in der foreach schleife, natürlich einige Properties nicht gesetzt sind, und aufgrund dessen, der Objektverweis nicht auf die Instanz festgelegt ist, was zur besagten Fehlermeldung führt.

Im Prinzip würde ich gerne so etwas in dieser art bauen.


JSONObjects (eine Klasse) contents = new JSONObjects();

contents = ersteteilbefüllungderproperties.FromJSON<JSONObjects>();
contents += zweiteteilbefüllungderproperties.FromJSON<JSONObjects>();
contents += letzteteilbefüllungderproperties.FromJSON<JSONObjects>();

for each (var items in contents)
{
ConsoleWriteLine(items.ToString());
}


Ich hatte auch erst mal angedacht eine List<JSONObjects> zu erstellen, und die per contents.Add(werte) zu befüllen, aber irgendwie stell ich mich zu dumm an und hab immer noch den fehlenden Objektverweis.

Ich bin noch nicht hundertprozentig fertig mit meiner deserialisierung, da der JSON String auch noch in übergeordnete Arrays unterteilt ist und ich diese auch noch befüllen muß.

Ich würde aber gerne diesen teilschritt lösen.

Jemand ne Idee wie ich das am besten löse ?

Sry. falls ich mich etwas undeutlich und kompliziert ausgedrückt habe. Ich bin da nicht so gut, solche Dinge zu erklären.

31.08.2018 - 14:02 Uhr

jetzt hab ichs kapiert danke. Stimmt ist klar. Woher soll der Compiler das wissen.

31.08.2018 - 13:46 Uhr

@Marsstein...

Naja, ich will die ja nicht zur Laufzeit ansprechen, bzw. genereieren. Diese Klassen bestehen schon, ich müßte nur referenzieren. Da ich aber unterschiedliche Klassen referenzieren muß (die sind ein bischen verschachtelt), wäre es toll, wenn ich diese mit einer "getClassByName" funktion als Generika übergeben könnte.

31.08.2018 - 13:43 Uhr

hi coffeebean,

also, nachdem ich ja den newtonSoft JSON Deserialisierer nicht nutzen kann, und der JavaScriptDeserialisierer in meinem Fall nicht zu gebrauchen ist; könnte hier etwas genauer ins detail gehen, aber fakt ist, der funktioniert mit meinem Input nicht richtig - muß ich einen eigenen Deserialisierer bauen.

Ich habe einen parser, der eine eingeschränkte Deserialisierungsfunktion hat, solange das nur auf "einer" ebene ist.

Das heißt, Properties (beliebige Anzahl) kann der Parser an die Klasse weiterleiten und befüllen.

Jetzt ist das jedoch nur ein "ausschnitt", des gesamten JSON Strings. Im Prinzp brauch ich eine "rekursive" funktion, die den kompletten JSON String durchläuft, ihn an den Parser übergibt, dieser dann die klassen befüllt, so das ich am ende, alles deserialisert habe.

Um es mal mit Code darzustellen:

einen teilstring wie:


{"made_sla": "true"}

bekomme ich deserialisiert


{"resolved_by": {
        "link": "https://dev64321.service-now.com/api/now/table/sys_user/5137153cc611227c000bbd1bd8cd2007",
        "value": "5137153cc611227c000bbd1bd8cd2007"
      }
}

das auch, wobei ich hier schon einen zwischenschritt einbauen muß, da der parser hier nur einen String bestehend aus ""link": "https://dev64321.service-now.com/api/now/table/sys_user/5137153cc611227c000bbd1bd8cd2007","value": "5137153cc611227c000bbd1bd8cd2007"" zurückliefert.

Im prinzp versuch ich mich jetzt durch den JSON String "durchzuhangeln", in dem ich den ersten value, als klasse übergebe, diese soweit befüllen lasse und später dann, diese referenz benutze, um den zurückgegeben String erneut zu deserialisieren.

Die Funktion heißt FromJson<class>. Returnvalue ist eine generika. Da die Klassen mit getter und setter befüllt sind, werden diese natürlich mit werten befüllt, ganz so wie ich es brauche.

Ich bin dabei den deserialisierer per hand zu schreiben. daher die anfrage über den funktionsumfang.

31.08.2018 - 13:15 Uhr

ok, lese ich mir durch, versprochen...

Jedoch habe ich noch eine kleine programmiertechnsiche Frage... Vielleicht weiß die ja jemand aus dem Effeff.

ich habe eine Funktion die auf eine klasse referenziert.


Funktion<klasse>

Ist es möglich, die klasse über generika so zu definieren, das ich eine Funktion habe, die mir eine klasse zurückliefert und diese dort einsetzt.

Im prinzip etwa so


public T GetClassByName(String klassenname)
{
...
return T
}

und ich dann schreibe...


Funktion<GetClassByName(klassenname)>

Würde das funktionieren ?

Umsetzung mach ich noch, da bin ich dran.

31.08.2018 - 10:41 Uhr

Hi,

es taucht ja in diversen Dokumentationen der Typ <T> auf. Ich bin jetzt bisher immer davon ausgegangen, das das ein Platzhalter für den Typ ist - also string, int, whatever.

Jetzt bin ich jedoch in einem Code über das hier gestolpert.


public static T function<T>(this string value)

Bedeutet das, das der Typ "wildcard"-mäßig gesetzt werden kann ?

Mag mir jemand das kurz erklären ?

30.08.2018 - 14:58 Uhr

Wo ist den OperationCanceledException definiert ? Ist sie vom Typ Exception ?

müßte es nicht nicht

catch (Exception e) lauten ?

30.08.2018 - 14:46 Uhr

Hallo,

ich muß mich n bischen in fremden Code einlesen, und bin über folgendes gestoßen....


public DateParseHandling DateParseHandling
{
 get => _dateParseHandling;
set
 {
 if (value < DateParseHandling.None ||
#if HAVE_DATE_TIME_OFFSET
value > DateParseHandling.DateTimeOffset
#else
value > DateParseHandling.DateTime
#endif
)
{
 throw new ArgumentOutOfRangeException(nameof(value));
 }
 _dateParseHandling = value;
 }
}

was für ne Bedeutung hat das #if - ist das sowas eine Kompileranweisung ?

Edit: ok, hätte auch google verwenden können. Gut es ist eine Anweisung für ein Symbol. Leider verstehe ich das mit dem Symbol nicht so ganz.

Nachtrag: Verstehe, man definiert ein Symbol um, bestimmte bzw. unterschiedliche "Mechaniken" beim Kompilen auszulösen.

Frage. Was bringt mir das effektiv ? Klar kann ich sowas wie - ich starte mal im Debug modus - ausführen und mir dann z.bsp. die ganzen Debug Meldungen anzeigen lassen. Aber das sind doch dinge, die doch nicht zur laufzeit passieren ? Oder doch ? Also, ich kann doch nicht den Code in 2 Variante z.bsp. ausführen lassen (entweder debug oder release). Oder kann man dieses "Flag" setzen...

Kann mich hier jemand etwas erleuchten ?

29.08.2018 - 17:43 Uhr

sieht wie ein konfigurationsproblem aus. Der pfad ist ist nicht gesetzt. bzw. falsch gesetzt.

konntest du das package mit dpkg installieren oder nicht ? wenn das natürlich nicht geschehen ist, wird das ganze nicht funktionieren.

die frage die sich unter anderem stellt, ist sudo überhaupt installiert.

Sudo gibt dir die möglichkeit, dinge als Administrator (root) auszuführen, so als wärst du root. Wenn das natürlich nicht eingerichtet ist (ist bei einer neuinstallation nur bedingt installiert), müßtest du deinen "managed" Typen fragen, ob er dir das einrichten kann.

Im Prinzip, kannst du dir sudo auch selbst einrichten, wenn du root bist, aber ich glaube kaum, das du da das passwort etc.... hast.

Zudem bräuchtest du als root, sudo nicht, aber darum gehts nicht. Mal abgesehen davon,das root nur administrieren sollte.

29.08.2018 - 17:30 Uhr

ich hab auch keine Lösung, habe mich mit Mausbedienung in C# noch nicht beschäftigt.

Aber aus alten Actionscriptzeiten, hatten wir hier einige Implementationen die vielleicht dir helfen können.

In flash gab es eine "MouseDown" Funktion, die z.bsp. einen Timer triggern könnte, um dann besagte Form zu öffnen, um dort droppen zu können.

Da die Dragfunktion in flash nur möglich war, wenn man einen bestimmten ausgewählten bereich (dragbereich) mit MouseDown berührte, könntest du ja deine 2 Sekunden abfrage damit koppeln, und sogar evtl, abfragen, was das gerade für ein "gedraggtes" objekt ist.

Wenn das natürlich (und leider kann ich nicht einschätzen, ob man das überhaupt abfragen kann) möglich ist, könntest du ja z.bsp. klären, ob du gerade einen "Scrollbalken" draggst, und in dem fall nichts machen.

In diesem fall, müßte, das so gehen wie du dir das vorstellst.

29.08.2018 - 17:15 Uhr

So, zur generellen Erheiterung hier ein kleines Update.

Mein Script war soweit schon richtig. Hatte nur das Problem, das ich die API-Abfrage begrenzt hatte, erst mit 1 Datensatz, später mit mehr Datensätzen.

Problematik bestand darin, das der Verweis auf eine Klasse mit 2 Properties - beim 2. Datensatz fehlschlug, da dort nur ein Leerstring zurückgeliefert wurde.

Da der Javascriptserialisierer, das nicht automatisiert erkennt, kann er natürlich einen String nicht in das entsprechende Objekt überführen.

der JSON.Parser bzw. JSON.Deserialisierer von newtonsoft kann das zwar, kann ich aber nicht verwenden, da Visualstudio meint, das meine Manifest, bzw. Assembly nicht die richtige ist.

Habe jetzt einen einfachen JSON.Parser gefunden, mit dem ich vor der Deserialisierung festlegen kann, in welchen Typ er deserialisieren soll. Bzw, in dem speziellen fall, einfach mit null-werten arbeitet.

Wie auch immer, ich bin noch dran, halte euch auf dem laufenden.

29.08.2018 - 17:06 Uhr

Fehlermeldung:
error: Fehler beim Hinzufügen des Pakets ".\packages\Newtonsoft.Json.11.0.2&quot; zum Projekt "C:\Projekt.csproj". Das Projekt bietet keine Unterstützung für das Hinzufügen von Paketverweisen über den Befehl zum Hinzufügen von Paketen.

ich hätte das wirklich gerne hinbekommen, hab aber erfahren, das es mit diesem package in der vergangenheit desöfteren Probleme gegeben hat, und wir es deswegen nicht nutzen.

Ist zwar nicht die Lösung des Problems (vor allem, weil ich bestimmt irgendwannd das privat mal selber nutzen will). aber damit muß ich wohl jetzt erst mal leben.

Danke LaTino für deine Hilfe !

29.08.2018 - 12:53 Uhr

ich hab das momentan so gelöst....


 private Cmdb_ci myVar;
            public Cmdb_ci cmdb_ci
            {
                get
                {
                    if (!(myVar.ToString() == "")) // funktioniert auch nicht  if (!(myVar is String))
                    {
                        return myVar;
                    }
                    else
                    {
                        return new Cmdb_ci();
                    }
                }
                set { myVar = value; }
            }

scheint so als würde der Deserialiser bei der Typenüberprüfun eine Exception schmeißen.

29.08.2018 - 11:00 Uhr

Guten Morgen,

Nachdem ich den newtonsoft deserialisierer aufgrund eines manifests/assembly Problems nicht zum laufen bekomme, möchte ich gerne den JavaScript deserialisierer benutzen.

Den hab ich soweit bislang auch genutzt, ist soweit kein problem.

Jetzt ist es aber so, das bei einer WinApi Abfrage, es sein kann, das ein value, das normalerweise aus einem Array besteht, auch mal ein leerstring sein kann.

Ich müßte also dem getter setter sagen - hey, wenn du nur einen leerstring bzw. null hast, dann führe get set nicht aus, sondern befülle, die erwarteten felder mit den und den daten.

Im Prinzip ne if anweisung, klar.

ich habe das noch nicht getestet, weils auch falsch ist ist mir klar, aber das müßte im prinzipi so aussehen.


public class JSONObjects
{
public class List<JSONValues> result { get; set }
}

public class JSONValues
{
public SpezielleKlasse specialclass
{

(pseudocode)

wenn specialclass == ""
dann specialclass.link = ""
        specialclass.value =""
ansonsten
{ get; set; }
}

wobei

public SpezielleKlasse
{
 public string link {get; set;}
 public string value { get; set;}
}

wie setze ich das richtig um ?

28.08.2018 - 15:36 Uhr

alternativ könntest ja mit nem Stringbuilder arbeiten der in einer for schleife steckt.

Allerdings weiß ich nicht, wie sich das mit dem ausdrucken verhält, hab hier keine erfahrungswerte

28.08.2018 - 15:14 Uhr

hi, warum machst du da nicht eine for schleife draus, z.bsp. so...

in dem du einfach bei 0 anfängst und bis zum Listview1.count durchzählst ? und einfach um 1 incrementierst und dann deinen text wiefolgt zusammenbastelst

Items[variableausforschleife].Subitems[0].... und so weiter... ?

bin gerade nicht zuhause, deswegen hab ich gerade keinen code zur hand

Edit: lass mich mal gucken, ich bin dran... moment

28.08.2018 - 13:35 Uhr

Hallo, ich benutze Visual Studio 2017. Net Core 2.1 und 1.1 ist installiert. NewtonSoft JSON Assembly ist eingebunden, dennoch bekomme ich folgende Meldung.

Fehlermeldung:
An error has occurred. The error is "Die Datei oder Assembly "Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)"

Der Verweis im Projektmappen-Explorer verweist auf Version 11.0.0.0. Installiert ist Version 11.0.2.0

Was könnte ich machen, um diesen Fehler zu beheben ?

Ich habe die Assembly über das NuGet Package System isntalliert, und auch schon n mit den versionen rumgespielt, leider ohne Erfolg.

hat jemand ne idee ?

27.08.2018 - 16:05 Uhr

sorry, kopf -> Tisch... hatte gerade nen knoten im kopf.

27.08.2018 - 15:45 Uhr

Ok, C# war nicht meine primäre Sprache. Habe mit Actionscript angefangen und dort eigene Linked Lists programmiert.

Nur ist die Sache hier etwas anders.

Also bitte nicht falsch verstehen, ich versuche hier nur ein paar Wissenslücken zu füllen.

Ich erstelle also eine List von meiner Klasse. Das die List eine unbegrenzte anzahl von meiner Klasse mit ihren Attributen annehmen kann - ist mir klar.

Nur wie spreche ich jetzt z.bsp. die 2. bzw. 3. (beispiel) erstellte Klasse innerhalb der List an ?

Also meineKlasse.meinAttribut - ist klar. Aber für die 2.Klasse in der List, wie würde ich die dann ansprechen ?

27.08.2018 - 15:28 Uhr

Hmm ok, wie erklär ich dir das jetzt am besten?

Also, wenn ich den Aufbau vom ersten JSON String mir genauer angucke (dort ist ja nur 1 Vorfall sozusagen drin), dann kann ich dort durch die erstellung eines neuen Objektes, die Werte befüllen lassen kein Ding.

Nun ist es aber so, das die API, ja mehrere Werte, des selben Typs zurückgibt, allerdings in unterschiedlichen arrays.

Das heißt, ich müßte ja pro array ein eigenes Objekt anlegen.

jetzt ist das aber 1 JSON String. Wiegesagt ich kenne die JsonConvert Funktion vom aufbau her nicht.

Ich gehe nicht davon aus, das der Deserialisierer automatisch neue klassen anlegt. Und wenn er das dann doch unerwarteter weise doch tun sollte - wie die Namensvergebung ist.

Oder übersehe ich jetzt etwas ?

27.08.2018 - 14:45 Uhr

Ich hab da mal ne Frage...

Wenn ich z.bsp. im Prinzip eine SELECT * abfrage auf eine WinAPI mache, kriege ich ja mehrere Instanzen des Objects zurück (Im JSON-String getrennt in arrays).

Ich würde gerne den Newtonsoft Deserialiser nehmen. Wie mache ich dem aber klar, das er für jede neue instanz ein neues Objekt anlegt ? Automatisiert wird wohl nicht gehen wa (ungetestet).

27.08.2018 - 11:15 Uhr

da gebe ich dir recht. Im Moment muß ich allerdings erst mal hinbekommen, das er erst mal sämtliche Werte auch die geschachtelten arrays übergibt - dort gibts noch probleme. Melde mich, die Tage, heute komme ich nicht mehr dazu.

27.08.2018 - 09:30 Uhr

Morgen Coffeebean.

Nein, das sind 2 calls. Da ich in den einem JSON String sozusagen ne Verknüpfung zu ner tabelle, die in einem anderen JSON String steht, muß ich 2x abfragen, um mein Ergebnis zu bekommen.

Das nun beide unterschiedlich aussehen, macht es jetzt nicht gerade einfach. Muß mir mal irgendwie nen parser zusammenschreiben, das ich den JSON String zerlegen und dann serialisieren kann.

Schade das es da keine fertige Lösung gibt.

24.08.2018 - 18:11 Uhr

Ich versuch die Problematik etwas einfacher darzustellen:

WebAPICall, leifert ein JSON-String zurück.

dieser ist stark vereinfacht wiefolgt aufgebaut:


[0]-Vorfall
    -UserId[0]-Link
           [1]-value
    -weitere Werte
[1]-Vorfall
    -UserId[0]-Link
           [1]-value
    -weitere Werte

Es soll eine Deserialisierung stattfinden und die Werte automatisch befüllt werden (ich kenne die Funktionsweise des JavaScriptSerializer nicht.)

Was ich in meine Überlegung noch nicht miteinbezogen habe ist, das [0]Vorfall und [1]Vorfall ja gleiche werte haben, jedoch mit unterschiedlichen Values.

Welches Datenformat eignet sich da am besten, wenn ich mehrere Vorfälle habe, und diese trotzdem mit den richtigen werten befüllt werden sollen ?

24.08.2018 - 17:17 Uhr

Hi, ich muß nochmal stören....

Bislang funktioniert das Script ganz gut. Löst die ganze Sache auch auf und so. Hab das jetzt als funktion definiert um das wiederverwendbar zu machen.

Jedoch ist mir eins aufgefallen. Der JSON String den ich auflösen kann, hat folgendes Format result.Array.Array

Benutze ich jetzt die Deserialisierung um ein result.Array aufzulösen, bekomme ich kein Ergebnis zurück.

hat jemand eine Idee wie ich das fixen kann ?

also

JSON-String 1 mit ineinander verschachtelte Arrays, wird schön deserialisiert

{"result":[{"parent":"","made_sla":"true","caused_by":"","watch_list":"","upon_reject":"cancel","sys_updated_on":"2016-12-14 02:46:44","child_incidents":"0","hold_reason":"","approval_history":"","number":"INC0000060","resolved_by":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/sys_user\/5137153cc611227c000bbd1bd8cd2007","value":"5137153cc611227c000bbd1bd8cd2007"},"sys_updated_by":"employee","opened_by":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/sys_user\/681ccaf9c0a8016400b98a06818d57c7","value":"681ccaf9c0a8016400b98a06818d57c7"},"user_input":"","sys_created_on":"2016-12-12 15:19:57","sys_domain":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/sys_user_group\/global","value":"global"},"state":"7","sys_created_by":"employee","knowledge":"false","order":"","calendar_stc":"102197","closed_at":"2016-12-14 02:46:44","cmdb_ci":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/cmdb_ci\/109562a3c611227500a7b7ff98cc0dc7","value":"109562a3c611227500a7b7ff98cc0dc7"},"delivery_plan":"","impact":"2","active":"false","work_notes_list":"","business_service":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/cmdb_ci_service\/27d32778c0a8000b00db970eeaa60f16","value":"27d32778c0a8000b00db970eeaa60f16"},"priority":"3","sys_domain_path":"\/","rfc":"","time_worked":"","expected_start":"","opened_at":"2016-12-12 15:19:57","business_duration":"1970-01-01 08:00:00","group_list":"","work_end":"","caller_id":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/sys_user\/681ccaf9c0a8016400b98a06818d57c7","value":"681ccaf9c0a8016400b98a06818d57c7"},"reopened_time":"","resolved_at":"2016-12-13 21:43:14","approval_set":"","subcategory":"email","work_notes":"","short_description":"Unable to connect to email","close_code":"Solved (Permanently)","correlation_display":"","delivery_task":"","work_start":"","assignment_group":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/sys_user_group\/287ebd7da9fe198100f92cc8d1d2154e","value":"287ebd7da9fe198100f92cc8d1d2154e"},"additional_assignee_list":"","business_stc":"28800","description":"I am unable to connect to the email server. It appears to be down.","calendar_duration":"1970-01-02 04:23:17","close_notes":"This incident is resolved.","notify":"1","sys_class_name":"incident","closed_by":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/sys_user\/681ccaf9c0a8016400b98a06818d57c7","value":"681ccaf9c0a8016400b98a06818d57c7"},"follow_up":"","parent_incident":"","sys_id":"1c741bd70b2322007518478d83673af3","contact_type":"self-service","reopened_by":"","incident_state":"7","urgency":"2","problem_id":"","company":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/core_company\/31bea3d53790200044e0bfc8bcbe5dec","value":"31bea3d53790200044e0bfc8bcbe5dec"},"reassignment_count":"2","activity_due":"2016-12-13 01:26:36","assigned_to":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/sys_user\/5137153cc611227c000bbd1bd8cd2007","value":"5137153cc611227c000bbd1bd8cd2007"},"severity":"3","comments":"","approval":"not requested","sla_due":"","comments_and_work_notes":"","due_date":"","sys_mod_count":"15","reopen_count":"0","sys_tags":"","escalation":"0","upon_approval":"proceed","correlation_id":"","location":"","category":"inquiry"}]}

JSON-String 2 das nur 1 Array tief ist jedoch nicht.


{"result":{"calendar_integration":"1","country":"","user_password":"ZtJNE15tAv","last_login_time":"","source":"","sys_updated_on":"2018-08-19 19:26:53","building":"","web_service_access_only":"false","notification":"2","enable_multifactor_authn":"false","sys_updated_by":"developer.program@snc","sys_created_on":"2004-07-03 18:26:05","sys_domain":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/sys_user_group\/global","value":"global"},"state":"","vip":"false","sys_created_by":"admin","zip":"","home_phone":"","time_format":"","last_login":"","default_perspective":"","active":"true","sys_domain_path":"\/","cost_center":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/cmn_cost_center\/7fb1cc99c0a80a6d30c04574d14c0acf","value":"7fb1cc99c0a80a6d30c04574d14c0acf"},"phone":"","name":"Joe Employee","employee_number":"","password_needs_reset":"true","gender":"Male","city":"","failed_attempts":"","user_name":"employee","roles":"","title":"Administrative Assistant","sys_class_name":"sys_user","sys_id":"681ccaf9c0a8016400b98a06818d57c7","internal_integration_user":"false","ldap_server":"","mobile_phone":"","street":"","company":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/core_company\/31bea3d53790200044e0bfc8bcbe5dec","value":"31bea3d53790200044e0bfc8bcbe5dec"},"department":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/cmn_department\/221db0edc611228401760aec06c9d929","value":"221db0edc611228401760aec06c9d929"},"first_name":"Joe","email":"employee@example.com","introduction":"","preferred_language":"","manager":"","locked_out":"false","sys_mod_count":"11","last_name":"Employee","photo":"","middle_name":"","sys_tags":"","time_zone":"","schedule":"","date_format":"","location":{"link":"https:\/\/dev64321.service-now.com\/api\/now\/v1\/table\/cmn_location\/25ab9ddd0a0a0bb3003572b22b3b4e55","value":"25ab9ddd0a0a0bb3003572b22b3b4e55"}}}

Was hab ich übersehen ?

Um es etwas zu präzisieren. Iteriere ich durch die List aus deserialisierten Werten, wie beim obersten Wert, bekomme ich keine Rückgabe, da die List wohl leer scheint.

Ich habe ja für die 2. Abfrage (ich muß einen verlinkten User suchen, der nur über eine 2. Abfrage realisierbar ist) 2 neue klassen erstellt.

JSONSysUserObjects und JSONSysUserValues

JSONSysUserObjects ist eine List aus JSONSysUserValues. Letzeres enthält sämtliche getter und setter für die werte, welche sich im JSON String befinden.

Ich bin ja davon ausgegangen, das die List befüllt wird und ich relativ einfach da durchiterieren kann.

NACHTRAG: Ich hab wohl einen Designfehler. Ich seh auch gerade den Wald vor lauter Bäumen nicht, sry. Angedacht war das ich ersteren JSON String habe, der eine Abfrage aus mehreren Möglichkeiten besteht (im moment getestet habe ich das nur mit einem Result (Werte aus einer Tabelle)). Habe ich mehrere Results, bekomme ich eine Fehlermeldung das ein System.String nicht in ein Objekt konvertiert werden kann (häh ?).

Im Prinzip soll ich einen Web-Api Call machen, mehrere "tables" bekommen, diese deserialisieren um dort werte auslesen zu können, und das ganze so verlinken, das ich 2 unterschiedliche Abfragen so kombiniere, das im endeffekt - dann da steht, Vorfall a, wurde von User b, angelegt.

24.08.2018 - 15:06 Uhr

Alles klar Coffeebean,

vielen Dank nochmal...

24.08.2018 - 14:55 Uhr

Hey Coffeebean,

hier ein "verkürzter" JSON String.


{"result":[{"parent":"","made_sla":"true","caused_by":"","watch_list":"","upon_reject":"cancel","sys_updated_on":"2016-12-14 02:46:44","child_incidents":"0","hold_reason":"","approval_history":"","number":"INC0000060","resolved_by":{"link":"https://dev64321.service-now.com/api/now/v1/table/sys_user/5137153cc611227c000bbd1bd8cd2007","value":"5137153cc611227c000bbd1bd8cd2007"},"sys_updated_by":"employee","opened_by":{"link":"https://dev64321.service-now.com/api/now/v1/table/sys_user/681ccaf9c0a8016400b98a06818d57c7","value":"681ccaf9c0a8016400b98a06818d57c7"},"user_input":"","sys_created_on":"2016-12-12 15:19:57","sys_domain":{"link":"https://dev64321.service-now.com/api/now/v1/table/sys_user_group/global","value":"global"},"state":"7","sys_created_by":"employee","knowledge":"false","order":"","calendar_stc":"102197","closed_at":"2016-12-14 02:46:44","cmdb_ci":{"link":"https://dev64321.service-now.com/api/now/v1/table/cmdb_ci/109562a3c611227500a7b7ff98cc0dc7","value":"109562a3c611227500a7b7ff98cc0dc7"},"delivery_plan":"","impact":"2","active":"false","work_notes_list":"","business_service":{"link":"https://dev64321.service-now.com/api/now/v1/table/cmdb_ci_service/27d32778c0a8000b00db970eeaa60f16","value":"27d32778c0a8000b00db970eeaa60f16"},"priority":"3","sys_domain_path":"/","rfc":"","time_worked":"","expected_start":"","opened_at":"2016-12-12 15:19:57","business_duration":"1970-01-01 08:00:00","group_list":"","work_end":"","caller_id":{"link":"https://dev64321.service-now.com/api/now/v1/table/sys_user/681ccaf9c0a8016400b98a06818d57c7","value":"681ccaf9c0a8016400b98a06818d57c7"},"reopened_time":"","resolved_at":"2016-12-13 21:43:14","approval_set":"","subcategory":"email","work_notes":"","short_description":"Unable to connect to email","close_code":"Solved (Permanently)","correlation_display":"","delivery_task":"","work_start":"","assignment_group":{"link":"https://dev64321.service-now.com/api/now/v1/table/sys_user_group/287ebd7da9fe198100f92cc8d1d2154e","value":"287ebd7da9fe198100f92cc8d1d2154e"},"additional_assignee_list":"","business_stc":"28800","description":"I am unable to connect to the email server. It appears to be down.","calendar_duration":"1970-01-02 04:23:17","close_notes":"This incident is resolved.","notify":"1","sys_class_name":"incident","closed_by":{"link":"https://dev64321.service-now.com/api/now/v1/table/sys_user/681ccaf9c0a8016400b98a06818d57c7","value":"681ccaf9c0a8016400b98a06818d57c7"},"follow_up":"","parent_incident":"","sys_id":"1c741bd70b2322007518478d83673af3","contact_type":"self-service","reopened_by":"","incident_state":"7","urgency":"2","problem_id":"","company":{"link":"https://dev64321.service-now.com/api/now/v1/table/core_company/31bea3d53790200044e0bfc8bcbe5dec","value":"31bea3d53790200044e0bfc8bcbe5dec"},"reassignment_count":"2","activity_due":"2016-12-13 01:26:36","assigned_to":{"link":"https://dev64321.service-now.com/api/now/v1/table/sys_user/5137153cc611227c000bbd1bd8cd2007","value":"5137153cc611227c000bbd1bd8cd2007"},"severity":"3","comments":"","approval":"not requested","sla_due":"","comments_and_work_notes":"","due_date":"","sys_mod_count":"15","reopen_count":"0","sys_tags":"","escalation":"0","upon_approval":"proceed","correlation_id":"","location":"","category":"inquiry"}]}

Im Prinzip - es gibt arrays, die sind aber 1 dimensional und haben nur 2 werte - dafür kommt das jedoch mal öfters vor in dem Json String.

24.08.2018 - 14:25 Uhr

Hallo,

ich lese eine WepAPI aus und deserialisiere den JSON-String.

Hier ein kleiner Auszug:


public class JSONObjects
{
public List<JSONValues> result { get; set; }
}

public class JSONValues
{
public string parent { get; set; }
public string[] resolved_by { get; set; }
}

das ist natürlich nur ein kleiner Auszug.

resolved_by liegt als Array vor, mit 2 Werten:

[resolved_by] => Array
(
 [link] => https://internetaddresse
[value] => 5137153cc611227c000bbd1bd8cd2007
 )

Es scheint so, als gibt es ein Problem mit dem befüllen des String Arrays.

Angedacht ist eigentlich, das ich später einfach da durchinterieren und per item.resolved_by[0] den link bekomme und bei item.resolved_by[1] den value.

Irgendwie hab ich hier noch einen Denkfehler drin.

Kann mir jemand erklären, was für einen Fehler ich gemacht habe ?

Nachtrag:

Ich glaube ich habe den Fehler lokalisieren können. Und zwar versuche ich den json-String zu deserialisieren via:

JSONObjects content = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<JSONObjects>(result);

23.08.2018 - 21:59 Uhr

Huhu, also um das ganze etwas zu entmystifizieren. Der Anwendungsfall ist natürlich deutlich größer.

Unsere Firma, Flowster Solutions, hat eine eigene Automatisierungssoftware, in die man per drag und drop wie in einem flowchart - "Aktivitäten" zusammenstöpseln kann. Das sind dann einzelne kleinere Programme, genauergesagt DLLs auf C# basis.

In meinem Anwendungsfall hatte ich eine Anwendung zu schreiben, mit der man auf einer Remote Maschine ein Python Script ausführen kann und der Output an die Software zurückgegeben wird.

Speziell eine List aus Strings.

Im Prinzip wird Zeile für Zeile des Outputs (stdout, bzw. stderr) - als String der List hinzugefügt.

Warum das so sein soll, ist nicht meine Aufgabe - ich pass das ganze nur an.

Das war nur eine kurze Verständnisfrage, weil ich beim Coden darüber gestolpert bin. Ich bin kein Pro wie Abt, aber bin ja noch dabei...

23.08.2018 - 14:11 Uhr

Visual Studio 2017 ?

Ach ja, stimmt, der code sah etwas anders aus, hab das beim editieren, vergessen wieder richtig zu stellen.

ich glaube das war vorher so...


List<string> returnValue = new List<string>{ "Output Value" };

23.08.2018 - 12:19 Uhr

Hallo,

ich hab da eine Verständnisfrage.

Es wird eine List<string> erstellt, diese mit Werten befüllt. Warum aber ist sie nicht initialiisert, wenn ich folgenden Code benutze ?

 public List<string> GetFileContent(string filename)
{
 string line;
 List<string> returnValue = new List<string>({ "Output Value" });
 System.IO.StreamReader file = new System.IO.StreamReader(filename);
 while ((line = file.ReadLine()) != null)
    {
    returnValue.Add(line);
    }
  return returnValue;
}

setze ich jedoch in der Zeile


List<string> returnValue = new List<string>(new string[] { "Output Value" });

sei sie initialisiert.

Ich verstehe das Prinzip da hinter nicht. Sollte es denn nicht so sein,das ich durch das schlüsselwort new, eine neue List aus Strings erstelle - und diese von haus aus, eigentlich ein array sein sollten ?

20.08.2018 - 13:53 Uhr

Ok, danke dir Abt.

In meinem speziellen fall darf ich keine powershell benutzen, habe aber jetzt festgestellt, das ich die dateien direkt mit File.WriteAllText mit hilfe des UNC Pfades schreiben kann, damit kann ich mir den umweg über die konsole sparen.

Anders siehts aus, wenn kein share vorhanden ist. Dann muß ich mir noch ne lösung einfallen lassen.

Solange das aber funktioniert, ist gut.