2012-09-05 2 views
0

ASP.NET MVC 4 응용 프로그램에서 "필드"배열이 포함 된 외부 서버에서 JSON 응답을 받았습니다. 각 필드는 개별 유형이며 해당 유형의 값 배열을 포함합니다.JSON 내용에 따라 동적으로 유형을 선택했습니다.

고유 ID 값에 액세스 할 수 있도록 JSON을 DynamicObject로 deserialize하거나 "ValueBase"클래스에서 파생 된 클래스를 필요로하는 자식 클래스 선택기가 필요합니다. 개별 값 객체의 여러 속성에 액세스합니다.

내가 무슨 뜻인지 알기를 바랍니다. 조금 복잡합니다.

이미 DynamicObject (DynamicObject에서 파생 된 클래스)로 역 직렬화를 시도했습니다. 하지만 표시하려는 속성이 존재하지 않는보기에서 해당 개체의 동적 속성에 액세스 할 때 오류 메시지가 나타납니다.

그렇다면 DynamicObject에서 파생 된 클래스는 JSON 코드에서 제공하는 개별 differengance "value"속성에 대한 액세스를 허용하고 부여하려면 어떻게해야합니까?

그리고 이것이 가능하지 않거나 잘못 될 경우 적절한 유형 선택기 클래스를 어떻게 구현해야합니까?

고맙습니다.

+0

이것이 ASP.Net 관련 문제인 경우 ASP.Net 사람들로부터 더 많은 관심을 받기 위해 태그가 지정되는 것이 좋습니다. – cloudfeet

+0

네 말이 맞아. 나는 내가 잊어 버린 것을 알고 있었다. .. 좋아, 그것은 태그를 붙였다. –

답변

0

나는 다소 스스로 해결했습니다.

리턴 된 JSON 객체 (JSON 배열을 더 정확하게)로 변환하는 대신 동적으로 가져 와서 다른 클래스의 인스턴스 콜렉션을 포함하는 클래스의 생성자에 제공하십시오 JSON 배열을 웹 서비스에서 반환합니다. 컬렉션 클래스의 생성자에서 JSON 객체의 값에 따라 새로운 객체가 상속 된 클래스를 결정하고 그 객체를 컬렉션에 넣습니다. 그래, 나는 어떻게 든 그 길을 걸었다. 그러나 그것은 일한다.

은 다음과 같습니다

public CollectionClass(dynamic dyn) 
{ 
    foreach(var item in dyn.items) { 
    switch((string)item.external_id) { // might have used a Dictionary instead but... 
     case "member": 
     this._collection.Add(new Member(item)); 
     break; 
     case "date": 
     this._collection.Add(new Date(item)); 
     break; 
     default: break; 
    } 
    } 
} 

회원 수준 자체도 동적 매개 변수를 필요로하는 유사한 생성자를 포함하고 있습니다. 또한 항목의 값에 따라의 값에 따라 "자체 빌드"됩니다.

더 쉬운 방법이 있거나 이것을 달성하는 "왕의 길"이 있다면 나는 더 이상의 조언에 감사 할 것입니다.

관련 문제