Aus auditiven Gründen speichere ich die Argumente der Business-Methoden serialisiert in der Datenbank mit dem binaryformatter.C# - Wie man eine generische Liste deserialisiert <T>, wenn ich den Typ von (T) nicht kenne?
Das Problem ist, dass, wenn ein Argument eine generische Liste ist ich finde nicht die Möglichkeit, das deserialized Objekt zu werfen, weil ich den Typ nicht kenne, oder wenn ich den Typ weiß ich nicht wissen, wie Wirf das Objekt zur Laufzeit.
Jeder weiß, wie man ein Objekt, das eine generische Liste enthält, zur Laufzeit dynamisch darstellt.
Ich muss dies tun, weil ich die deserialisiert Daten in einem Eigenschaftenraster zeigen müssen:
object objArg = bformatter.Deserialize(memStr);
//If the type is a clr type (int, string, etc)
if (objArg.GetType().Module.Name == "mscorlib.dll")
{
//If the type is a generic type (List<>, etc)
//(I'm only use List for these cases)
if (objArg.GetType().IsGenericType)
{
// here is the problem
pgArgsIn.SelectedObject = new { Value = objArg};
//In the previous line I need to do something like...
//new { Value = (List<objArg.GetYpe()>) objArg};
}
else
{
pgArgsIn.SelectedObject = new { Value = objArg.ToString() };
}
}
else
{
//An entity object
pgArgsIn.SelectedObject = objArg;
}
"Auditorische Gründe"? Was bedeutet das in diesem Zusammenhang? –
Für die Einhaltung der Auditvorschriften würde ich mir vorstellen. – AakashM
Für Informationen, 'BinaryFormatter' ist ziemlich spröde, wenn Sie Ihre Objekte ändern. Ich würde einen contract-based Serializer wie XmlSerializer, DataContractSerializer oder (für binäres) protobuf-net empfehlen. –