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 ?
Dann mußt du eben auf die automatischen Getter/Setter verzichten und diese selber implementieren (mit einem BackingField).
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.
Dein Getter schmeißt eine Nullreferenz Exeption wenn myVar null ist (myVar.toString()).
Sollte man mal gelesen haben:
private Cmdb_ci myVar;
public Cmdb_ci cmdb_ci
{
get
{
return !string.IsNullOrEmpty(myVar)
? myVar
: (myVar = Cmdb_ci());
}
set { myVar = value; }
}
Bitte [Artikel] C#: Richtlinien für die Namensvergabe beachten. Cmdb_ci klingt eher nach einem Lungentumor als nach einer Variable.
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Hallo,
hier mal ein Beispiel wie es damals umständlich jedoch einfach ersichtlich gemacht wurde:
private Cmdb_ci myVar;
public Cmdb_ci cmdb_ci
{
get
{
if(myVar == null)
{
myVar = new Cmdb_ci()
return myVar;
}
// Hier stellt sich die Frage, was bei .ToString() zurückgegeben werden kann?: (Könnte man unter Umständen String.IsNullOrEmpty oder String.IsNullOrWhitespace verwenden)
if(myVar.ToString() == String.Empty)
{
myVar = new Cmdb_ci()
return myVar;
}
return myVar;
}
set { myVar = value; }
}
Natürlich ist @LaTino's Beispiel die bessere Alternative, wobei bei
!string.IsNullOrEmpty(myVar)
ich mir nicht sicher bin, ob das auch für Objekte funktioniert, die kein 'string
' sind?
Grüße
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄
Hast recht, dass das gar kein String ist, habe ich nicht gesehen. Dann ergibt das noch viel weniger Sinn mit dem ToString(), weil das nur "" werden kann, wenn jemand die ToString()-Methode der kryptisch benannten Klasse absichtlich kaputt gemacht hat.
Dann also einfach nur lazy initialisiert:
private Cmdb_ci _objectValue;
public Cmdb_ci ObjectValue => _objectValue ?? (_objectValue = new Cmdb_ci());
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)