2012-12-29 3 views
1

아래 예제와 같은 JSON 객체를 수신합니다.데이터 계약을 매핑하여 JSON 객체의 올바른 필드를 참조하는 방법은 무엇입니까?

{
"이름 1": { "name1a": "value1a", "name1b": "value1b"},
"NAME2": { "name2a": "value2a", "name2b" 이 같은 (난 단지 그 순간에 하나의 데이터 필드에 접근 할 필요가 있기 때문에) "value2b"}
}

나는 그것을 위해 데이터 계약을 설정했습니다. 그들에게 필드 Name1b를 (I 클래스의 캐릭터 설명을 얻고 있기 때문에, 어떤 작품) 내가 객체를 직렬화 한

[DataContract] 
public class MyThingy 
{ 
    [DataMember(Name="name1b")] 
    public string Name1b { get; set; } 

    public MyThingy() { } 

    public MyThingy(String name1b) 
    { 
    Name1b = name1b; 
    } 
} 

, 나는 그것을 밖으로 인쇄 해 봅니다. 마지막 부분은 작동하지 않으며 나는 null을 얻고 있습니다. 내 생각 엔 데이터 계약을 잘못 매핑 했음에 틀림 없지만이를 수정하는 방법을 알 수 없다.

MyThingy 클래스를 어떻게 선언해야합니까?

내 JSON 개체는 this post에 설명 된대로 가져옵니다. 여기 JavaScriptSerializer을 사용

답변

0

,

string json = @"{ 
    ""name1"":{""name1a"":""value1a"",""name1b"":""value1b""}, 
    ""name2"":{""name2a"":""value2a"",""name2b"":""value2b""} 
    }"; 

var obj = new JavaScriptSerializer() 
      .Deserialize<Dictionary<string, Dictionary<string, string>>>(json); 

Console.WriteLine(obj["name1"]["name1b"]); 

또한 Json.Netdynamic 함께

dynamic obj = JsonConvert.DeserializeObject(json); 

Console.WriteLine(obj.name1.name1b); 
+0

당신이 그것을 더 내가로부터 받고 있어요 스트림을 변환하는 것이 좋습니다 건가요 사용할 수있는' HttpWebRequest'를'String' 객체로 변환 한 다음 ** ** 그것을 구문 분석합니까? 게다가 - 내가 만든 데이터 계약 방식을 사용하는 것이 완전히 취소 되었습니까? 나는 미래에, 아마도 하나의 필드를 얻는 것보다 더 진보 된 파서가 필요할 것이라고 생각합니다. 어떻게 생각해? –

+0

또한 서버에 새 라이브러리를 설치할 수 없습니다. 나는 그것을 기본 .NET 4 (어쩌면 4.5)를 사용하여 해결해야합니다. –

+0

@AndreasJohansson'JavaScriptSerializer' 또는'Json.Net'을 사용하면 비 직렬화 과정을보다 강력하게 제어 할 수 있습니다. 나는 그것들 중 하나를 선택할 것이다. (BTW : MVC 4는 기본적으로 Json.Net을 사용하며 그것은 내가 좋아하는 것이다.) –