2012-02-09 4 views
6

현재 json.net과 협력 중입니다! json 데이터를 deserialize하는 방법과 클래스와 매핑하는 방법을 알고 있습니다. 이제 몇 가지 질문에 대해 열망합니다!JSON에서 가능합니까?

내 jsonstrings을 가정이 (내가 문자열 위의 역 직렬화하려는 )

"attributes":{ 
      "color":"Brown", 
      "condition":"Used", 
      "currency":"USD", 
      "price":"10500", 
      "price_display":"$10,500", 
     } 

내 속성 클래스입니다 지금은 직렬화에 대해 다음 코드를 사용하고

Public class Attribute 
{ 
     public string name{ get; set; } 
     public string value{ get; set; } 
} 

입니다.!

JavaScriptSerializer ser = new JavaScriptSerializer(); 
<classname> p = ser.Deserialize<classname>(jsonString); 

분명히이 코드는 위의 jsonstring에서 전혀 작동하지 않습니다.

이제 어떻게이 이름 값 쌍을 한 클래스에 바인딩 할 수 있습니까 ?? 이것이 가능한가 ? 앞으로

는 10 개 이상의 ㄴ 수 속성 만 형식은 이름 값 쌍으로 동일합니다

+0

예를 들어 사전 <동적, 객체> – NibblyPig

답변

1

편집 : 미안 해요,하지만 당신은 직렬화에 원하는 것처럼 어떻게 든 내가 질문을 해석, 그리고 아니 deserialize (하지만 나는 어쨌든 아래의 원본을 유지, 나는 그것이 좋은 지식이라고 생각으로 :)).

Attribute 대신 JSON 문자열을 Dictionary<string,string>으로 역 직렬화 해보세요. 나는 그것이 작동 할지도 모르는 직감이있다. 그런 다음 해당 사전을 사용하도록 나머지 코드를 조정하거나 Attribute 인스턴스 컬렉션으로 변환 할 수 있습니다.


아래 (당신이 무엇을 요구의 반대를했다를 직렬화 관련) 원래의 대답.

난 그렇게 생각하지 않지만 의도는 클라이언트에이 방법을 사용하는 경우 :

attributes["color"] // returns Brown 
attributes["price"] // returns 10500 

... 그것은 당신이, "연관 배열"라고 후 것입니다 다음으로를 (; 예 window.onloadwindow["onload"]와 동일 자바 스크립트 객체의 속성을 참조하는이 두 가지 방법을 제공) ...

,369

attributes.color 
attributes.price 

... 정말 배열 아니지만 객체 것에 따라이 동등

... Dictionary<string,string>을 JSON 문자열로 serialize하면 (즉, Attribute 클래스를 KeyValuePair<string,string>으로 변경하거나 달리 사전을 다르게 만드는 경우 JavaScriptSerializer를 사용하여이 작업을 수행 할 수 있습니다.

+0

과 같은 사전을 생성하기 위해'dynamic' 키워드를 사용할 수 있습니다. 그것은'Dictionary '과 함께 작동합니다! – Chintan