7 messaggi dal 21 settembre 2019
In .NetCore 6 ho realizzato una procedura che correttamente carica una dll esterna, ne crea una istanza per poter eseguire poi i suoi metodi. Fin qui tutto bene senza problemi particolari.
Il problema nasce nel passaggio dei parametri al metodo 'Invoke' che accetta solo tipi object[]

Diciamo che la dll esterna caricata contenga questo metodo che chiede in ingresso un oggetto Json:

public Json_2fattori Test1_converter(JObject datijson)
{
    Json_2fattori mydati = new Json_2fattori
    {
        fattore1 = datijson["parametro1"].ToObject<double>(),
        fattore2 = datijson["parametro2"].ToObject<double>()
    };
    return mydati;
}


e che il programma principale lo chiami come segue:

 
object instanceDLL = Activator.CreateInstance(tipoDLL);
MethodInfo metodoInfo = tipoDLL.GetMethod(metodo);
risultato = metodoInfo.Invoke(instanceDLL, new object[] {myJsonData});


dove myJsonData è un oggetto Newtonsoft JObject che contiene i parametri con valore in formato json:

 
{
    "parametro1": "30.0",
    "parametro2": "40.0"
}


A runtime l'errore che mi si presenta è il seguente:

 
Newtonsoft.Json.Jobject cannot be converted to Newtonsoft.Json.Jobject


Perche?
57 messaggi dal 17 maggio 2010
ciao,
Il problema che riscontri deve essere da un altra parte. Nello scenario che proponi tu non c'è questo problema.
Controlla meglio le eccezioni e stacktrace.
Poi se vuoi un consiglio più dettagliato prova a postare il codice reale.
7 messaggi dal 21 settembre 2019
Per quello che riguarda il codice è reale, nel senso che per evitare complicazioni ho creato un mini-progetto con il codice 'essenziale'
La cosa strana è che in un progetto Core 3.1 funziona perfettamente.

Per Core 6.0 sembra che abbia trovato una soluzione, ma trasformando il Json in object[] , lo stesso ho fatto al parametro del metodo.
Poi il metodo remoto si occupa anche di trattare l'object per derivarne a ritroso i parametri. Ma non ho ancora capito le ragioni della necessità di questo "giro".

Se qualcuno ha una spiegazione lo ringrazio.
57 messaggi dal 17 maggio 2010
Francamente non saprei che dirti... come potrei notare qui : https://dotnetfiddle.net/dB9KgG carica ed esegue il codice della dll con il metodo esattamente come il tuo del primo post, lo chiama passando JObject e non ho nessun errore (Guarda il source della dll nel commento).
Le altre cose sono piccolezze, ma se vuoi confronta pure con quello che stai facendo tu.
Sono curioso di capire cosa fai di diverso, potrebbe essere utile saperlo.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.