2011-11-03 4 views
13

미리 매개 변수에 대해 알지 않고 JSON에서 익명 형식을 만들고 완전히 해석합니다 (힌트 포함 가능). 즉 int, string 또는 date와 같은 값을 "찾습니다".JSON.Net을 익명 형식으로 deserialize하는 방법은 무엇입니까?

내가 아는 유일한 방법은 사전 지식이있는 익명 형식을 만드는 것입니다. 아래의 .DeserializeAnonymousType (...) 메서드를 참조하십시오.

누구보다 좋을 수 있습니까? 감사.

 var jsonString = "{\"user_id\": 1, \"user_type\": \"moderator\", \"name\": \"Fred\"}"; 

     JToken root = JObject.Parse(jsonString); 

     var anonTemplate = new{user_id=0, user_type="", name="" }; 

     var a = JsonConvert.DeserializeAnonymousType(root.ToString(), anonTemplate); 


     var b = JsonConvert.DeserializeObject<Object>(root.ToString()); // actually turns into a JsonObject which is something differet. 

업데이트 나는 dynamicduck을 다운로드하고 그것을 조금 함께 연주하고있다. 이 이상한 역동적 인 "래퍼 (wrapper)"아이디어는 내가 필요로하는 방식 (직렬화 가능, 기타 등등)에서 가능할 수있을 것인가?

http://weblogs.asp.net/britchie/archive/2010/08/05/json-net-dynamic-extensions.aspx

http://weblogs.asp.net/britchie/archive/2010/08/03/dynamicduck-duck-typing-in-a-dynamic-world.aspx

+0

.NET 4의 경우 '동적'객체로 직렬화를 해제하고 필요한 속성에 명시 적으로 액세스 할 수 있어야한다고 가정합니다. – sll

+2

매개 변수가 무엇인지 또는 알 수없는 경우이 객체를 어떻게 소비할까요? 있다? – KallDrexx

+0

@sll : 예제가 있습니까? 동적 유형에 반대하지 않습니다. 나는 때때로 그들을 사용하고있다. 이 경우, 내 다음 질문은 동적 유형에서 익명 유형으로 변환하는 방법입니다. 퍼포먼스는 문제가 아니기 때문에 나는 어느 쪽의 경로에도 만족한다. 그러나이 경우에는 기존 라이브러리가 필요하다. – sgtz

답변

6

당신은 ExpandoObjectConverter를 사용하여 ExpandoObject에 JSON.NET와 역 직렬화 할 수 있습니다.

런타임에 익명의 유형을 작성하려면, 아주 조금 더 복잡, 농구를 살펴보고이 스레드를 통해 뛰어 : 당신이 노력을 꽤 볼 수 있듯이

How to create LINQ Expression Tree to select an anonymous type

그 아마도 컴파일 타임의 안전성을 얻지 못했기 때문에 아마도 가치가 없습니다. 따라서 dynamic 또는 ExpandoObject가 최선의 선택입니다.

+1

당신이 연결할 수있는 ExpandoObjectConverter 사용 예가 있습니까? – sgtz

관련 문제