2017-10-19 8 views
-2

J'ai 3 classes comme ci-dessous.Impossible d'ajouter la liste <object> à la liste <objet personnalisé>

[Serializable] 
public class Classa { 
    public list<Object> list {get; set;} 
} 

[Serializable] 
public class Classb { 
    public string name {get; set;} 
    public string nickname {get; set;} 
} 


[Serializable] 
public class Classc { 
    public string type {get; set;} 
    public string price {get; set;} 
} 

Dans mon programme, je veux jeter List<Object> à List<Classb> ou List<Classc> quand je passe la mise en correspondance de la structure JSON avec Classb ou Classc ... est-il possible de le jeter?

[HttpPost] 
[ActionName("Import")] 
[EnableCors(origins: "*", headers: "*", methods: "*")] 
public Object Import([FromBody]Classa ImportData) 
{ 

    List<Classb> blist = a.list.Cast<Classb>().toList(); 

} 

Il lance:

Impossible de jeter l'objet de type 'Newtonsoft.Json.Linq.JObject' taper 'ClassB'

J'ai essayé:

List<Classb> blist = aOfType<Classb>().ToList(); 

Succès mais sans valeur ..

+0

Oh .. Je le corrige moi-même ... Juste Convertir en Jarray d'abord le corrigera –

Répondre

0

En Classa vous avez une liste avec des objets, mais vous voulez une liste avec Classb. Donc changer cette

[Serializable] 
public class Classa{ 
list<Object> list{get;set;} 
} 

à

[Serializable] 
public class Classa{ 
list<Classb> list{get;set;} 
} 

Et ce

List<Classb> blist = a.list.Cast<Classb>().toList(); 

Peut-être

List<Classb> blist = a.list; 

EDIT: Vous avez une faute de frappe son

publc class Classb{ 
+0

Je sais que c'est une solution .. mais j'ai d'autres classes par exemple classc .. Je veux le mettre dans la liste aussi .. que je ne peux pas changer à la liste btw merci –

+0

Si vous voulez faire cela, vous pouvez laisser Classa avoir 2 listes, avec Classb et Classc. Mais si vous voulez vraiment que Classa ait seulement 1 liste. Vous créez un nouveau ClassSuper et vous étendez Classb et Classc à ClassSuper. Classa aura une liste avec ClassSuper –