Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Pregunta: Llamar a un método genérico desde .dll (C# mono)

Iniciado por yorch, 26 de Enero de 2012, 05:13:55 PM

« anterior - próximo »

yorch

Hola,

Llevo dando vueltas desde ayer a un problema que tengo para llamar a un método genérico en una .dll de C# (mono) desde Unity3d. La .dll es una librería para parsear JSON (para el que no lo conozca es un formato con menos overhead que XML. Se usa en web services).

Estoy intentando llamar a un método que tiene esta pinta:

JsonReader.Deserialize<T>(string json);

Y de momento me funciona algo así:

assembly_ = Assembly.LoadFrom(Application.dataPath + "/Editor/Test/JsonFx.Json.dll");
assemblyType_ = assembly_.GetType("JsonFx.Json.JsonReader");
this.response_ = assemblyType_.InvokeMember("Deserialize", BindingFlags.InvokeMethod, null,
                                            System.Activator.CreateInstance(typeof(object)),
                                            new object[]{ this.responsePlaceholder_ });


El código de arriba es la "chapuza" de utilizar el Diccionario por defecto que devuelve el método estático (no genérico) Deserialize, pero claro, no es lo ideal... como sería tener el DOM relleno de las estructuras ya formateadas, que permite la librería.

Link a ejemplos de la librería JSON en Unity3d y los diferentes usos: http://the.darktable.com/post/13105524184/quick-demo-of-jsonfx-usage-in-unity

Necesitaría utilizar directamente esa .dll, aunque tendría el source de JSonFX y lo podría compilar, ya que es algo que voy a distribuir y la persona del link de arriba ya se ha currado quitar varias cosas relacionadas con XML que no me hacen falta.

He mirado cosas como esta usando reflection, pero es bastante dolor de cabeza y no consigo que me devuelva elementos no nulos: http://stackoverflow.com/questions/232535/how-to-use-reflection-to-call-generic-method

¿Alguna idea de cómo hacerlo? ¿Please, alguien ha hecho algo parecido?






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.