2017-12-08 4 views
4

Ich habe eine Klasse, die mit VResult<T>Extract Objekttyp zu verwenden, wie generische <T>

bool value = true;  
VResult<bool> vr = new VResult<bool>(value); 

instanziiert werden kann, wenn ich die Art des value weiß nicht, würde Ich mag so etwas wie

tun
VResult<typeof value> = new VResult<typeof value>(value); 

Ist das möglich?

Das ultimative Ziel ist VResult<T> zu serialisiert/deserialisiert:

string json = JsonConvert.SerializeObject(new VResult<bool>(true)); 

wo könnte ein Objekt oder eine Basisdatentyp wie int oder bool sein.

Ich bin mit einem Datentransferobjekt, das

ValueTypeName = Value.GetType().Name; 

und

ValueTypeNamespace = Value.GetType().Namespace; 

Eigenschaften, so dass auf der Empfangsseite hinzufügt kann ich

JObject obj = JObject.Parse(json); 
string vt = (string)obj["ValueTypeName"]; 
string vtn = (string)obj["ValueTypeNamespace"]; 
Type type = Type.GetType($"{vtn}.{vt}"); 
var value = Activator.CreateInstance(type); 
value = obj["Value"]; 
VResult<typeof value> vr = new VResult<typeof value> (value); //not correct 

alle bekommen Type Informationen über value, aber ich finde gerade nicht heraus, wie man das generi bekommt c <T> von value, um es im VResult<T> Konstruktor zu übergeben;

object value = 1; //I don't know the runtime type of this 
var genericType = typeof(VResult<>).MakeGenericType(value.GetType()); 
var genericInstance = Activator.CreateInstance(genericType, 
               new object[] { value }); 

Und Sie haben jetzt eine Instanz von VResult<int> mit einem value von 1:

Antwort

3

Sie können die generische Instanz wie folgt erstellen. Ist das wonach Sie gesucht haben?

+0

Ja - genau das habe ich gesucht. Funktioniert super! –

Verwandte Themen