2015-01-20 2 views
3

설문 조사 응답을 위해 REST 웹 서비스에서 JSON이 반환됩니다. 그것은 일부 이름 값 쌍의 이름 부분에 대한 배열을가집니다. 또한 질문의 유형에 따라 이름이 달라질 수 있습니다. JSON.net을 사용하고 반환 된 값을 객체 트리 유형으로 deserialize하려고 시도했지만 걸을 수있는 구조가 무엇인지 알아낼 수 없습니다.변수 이름 배열을 사용하여 JSON을 비 직렬화

다음 스 니펫을에서 테스트했습니다. LinqPad와 필드는 항상 비어 있습니다. 변수 데이터를 쉽게 읽을 수 있나요? 아니면 코드에서 파싱해야합니까? 다음 배치됩니다

public class Response 
{ 
    public string id { get; set; } 
    public string status { get; set; } 
    public string datesubmitted { get; set; } 
    [JsonExtensionData] 
    public Dictionary<string, object> fields { get; set; } 
} 

이상한 속성 이름과 필드의 모든 :

void Main() { 
    string json = @"{ 
     'result_ok':true, 
     'total_count':'51', 
     'data':[{ 
     'id':'1', 
     'status':'Deleted', 
     'datesubmitted':'2015-01-12 10:43:47', 
     '[question(3)]':'Red', 
     '[question(4)]':'Blue', 
     '[question(18)]':12, 
     '[variable(\'STANDARD_IP\')]':'127.0.0.1', 
     '[variable(\'STANDARD_GEOCOUNTRY\')]':'United States' 
     }] 
    }"; 
    var responses = JsonConvert.DeserializeObject<RootObject>(json); 
    responses.Dump(); 
} 

public class RootObject { 
    public bool result_ok { get; set; } 
    public string total_count { get; set; } 
    public List<Response> data { get; set; } 
} 

public class Response { 
    public string id { get; set; } 
    public string status { get; set; } 
    public string datesubmitted { get; set; } 
    public List<object> fields = new List<object>(); 
} 
+0

내가 완전히 확실하지 않다, 그러나 그것은 심지어 나에게 유효한 JSON처럼 보이지 않는다. –

+0

http://jsoneditoronline.org/ 및 .Net JSON 비주얼 라이저에서 문제를 해결하는 것으로 보입니다. –

+2

일부 라이브러리는이를 처리 할 수 ​​있지만 속성 이름 주위의 작은 따옴표는 사양을 벗어났습니다. 사양에는 큰 따옴표가 필요합니다. –

답변

3

변경은 Response 클래스의 fields 속성은 다음과 같은 [JsonExtensionData] 속성을 표시하는 Dictionary<string, object> 할 수 사전에 액세스하여 정상적으로 액세스 할 수 있습니다. 추가 코드는 필요하지 않습니다. 여기

는 데모입니다 : https://dotnetfiddle.net/1rQUXT

+0

@Brain Rogers가 dotnetfiddle.net을 위해 그것을 알지 못했다. 아주 멋지다. – loneshark99

관련 문제