Alka ha scritto:
best1904 ha scritto:
T diventerebbe comunque JObject
Se si usa ToDynamicObject() ovviamente sì, ma non è l'unico modo per deserializzare un oggetto partendo dal JSON.
Ad esempio, si può usare anche JsonConvert.DeserializeAnonymousType<>() che ha il supporto per tipi anonimi, o il più generico JsonConvert.DeserializeObject<>(), tutti basati sui Generics e quindi capaci di supportare il tipo indicato.
Sempre se ho capito bene il dubbio originale.
Ciao!
Non so se ho capito male io o tu, ma non ha importanza con il mio quesito. Io parto dal presupposto, magari sbagliato, che l'errore che ha riscontrato orecchione possa essere causato dal fatto che dentro CallService possano ricavare informazioni tramite reflection, questo spiegherebbe perché magari con JObect "non funziona" mentre con il tipo anonimo si. Ma è solo una mia supposizione.
Diciamo che in quel caso dovrebbe passare un tipo che possa lavorare con reflection. Ovviamente anche JObject lavora con reflection essendo un tipo, ma se si cercano le proprietà indicate dal json non si trovano.
Con JsonConvert.DeserializeAnonymousType bisogna comunque dichiarare in compilazione la definizione con un tipo anonimo o comunque dichiarare una classe se usi JsonConvert.DeserializeObject, o sbaglio? Nel caso non mi sbagli tanto vale dichiarare direttamente il tipo anonimo e passarli quello. Nel caso mi sbagli mi piacerebbe capire come si fa, se fossi così gentile da mostrarmelo ti ringrazierei.
Da quello che mi pare di capire orecchione è in una situazione in cui lui senza ricompilare nulla nel caso aggiungano "funzionalità" o senza prevedere tutti i tipi a priori, possa chiamare con stringa dei comandi passando dei valori tramite tipi che non sono previsti in compilazione da lui, ma che vengono letti, supposizione mia, tramite reflection dal sistema che espone il metodo CallService. Ma fintanto che non lo dice lui se funziona o no "ToDynamicObject()" non possiamo sapere se l'intuizione della reflection è corretta, ma poco importa, la discussione la trovo costruttiva.
Nel caso serva solo la lettura/scrittura delle proprietà, JObect fa il suo lavoro egregiamente, puoi ricavare tutte le info necessarie, ma non tramite reflection purtroppo, quindi non sarebbe adattabile ad un sistema già esistente, per quanto sia opinabile visto che lavorerebbe molto bene con JObject. Sarebbe bello valutare bene se sia meglio reflection o usare JObject, ovviamente intendendo per ricavare le sole proprietà, per il resto senza reflection non si può, vedi ad esempio chiamare metodi.
EDIT:
Probabilmente intendevi che con ToDynamicObject() non è JObject.