Wie kann ich feststellen, ob ein Objekt ToString in Wert oder Typname kann?

Ich schreibe eine Interop zwischen einem PHP-Dienst und unserer crm. Ich muss unter anderem sicherstellen, dass einfache Typen für die spätere Verwendung in einem JSON-Konverter in ToString () konvertiert werden.

Ich bin mir nicht sicher, wie der Name für 'einfache Typen' lautet, aber er kann wie folgt definiert werden ... "Ein Objekt, das einen einfachen Variablentyp darstellt, der einen einzelnen Wert enthält, keine Klasse oder irgendetwas mit ausführbaren Funktionen usw "

Ich habe festgestellt, dass int, string, bool, double und überraschenderweise enum ToString () zu ziemlich vorhersehbaren Ergebnissen führen.

int x = 0;
bool y = true;
double z = 1.59 // money
CustomEnum theEnum = CustomEnum.somevalue;

x.ToString () ergibt "0"

y.ToString () ergibt "true"

z.ToString () ergibt "1.59"

theEnum.ToString () ergibt "somevalue"

Aber wenn ich das benutze:

List<int> iList = new List<int>();
iList.Add(1);

MyClass theClass = new MyClass();

iList.ToString () ergibt "System.Collections.Generic.List`1 [System.Int32]" theClass.ToString () ergibt "STTI.NKI.Interop.MyClass"

Ich bin nicht auf Listen beschränkt. Ich könnte ein ExpandoObject haben, oder eine Klasse usw.

Ich verstehe GENAU, warum dies passiert, und ich möchte wissen, ob es eine schnelle Möglichkeit gibt, festzustellen, ob ein Objekt mit unbekanntem Typ ToString () in einen erwarteten Wert und nicht in den Typnamen umwandelt. Ich finde es ein Gegenmuster, so etwas wie @ zu mach

switch (theObject.GetType())
 case typeof(int):
 case typeof(bool):
 case typeof(doulble):
etc

Ich bin mir nicht sicher, wie die Bedingungen lauten. Meine Antwort zu googeln, erweist sich als schwierig.

Antworten auf die Frage(12)

Ihre Antwort auf die Frage