2017-10-19 7 views
-2

아래와 같이 3 개의 클래스가 있습니다. 내 프로그램에서목록을 캐스팅 할 수 없습니다 <object><사용자 지정 개체> 목록에

[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;} 
} 

, 나는 내가 Classb 또는 Classc로 JSON 구조의 일치를 통과 할 때 List<Classb> 또는 List<Classc>List<Object> 캐스팅 할 ... 캐스팅 할 수있는 방법은 무엇입니까?

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

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

} 

이 발생합니다 :

입력 유형 'Newtonsoft.Json.Linq.JObject'의 개체를 캐스팅 할 수 없습니다 'ClassB가'

나는 시도했다 :

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

성공했지만 아무런 가치가 없습니다.

+0

아 .. 난 그냥는 jarray로 변환 ... 그것을 자신을 해결 처음에는 그 해결책 중 하나 알고 ...하지만 난 예를 들어 classc 다른 클래스가 그것을 –

답변

0

Classa에는 개체 목록이 있지만 Classb 목록이 필요합니다. 그래서이

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

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

그리고이

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

될 수

List<Classb> blist = a.list; 

편집을 변경 당신은 오타 그녀가

publc class Classb{ 
+0

가 해결됩니다 .. 나는 목록 에 넣어 싶어 너무 .. 목록으로 바꿀 수 없도록 –

+0

Classa와 Classc를 사용하여 Classa가 2 개의 목록을 갖도록 할 수 있습니다. 그러나 정말로 Classa가 1 개의 목록 만 갖고 싶다면. 새로운 ClassSuper를 만들고 Classb와 Classc를 ClassSuper에서 확장합니다. Classa는 ClassSuper와 함께 목록을 작성합니다. –