2016-06-16 2 views
-2

이 JSON 배열 역 직렬화하는 방법 :JSON이 (의사 코드)처럼오고

[{one-off intro object}, [{object},{object},{object}]] 

그래서 배열의 첫 번째 것은 내가 관심이 아니에요과 목적은 배열의에게 두 번째는 실제로 deserialize하려는 객체로 가득 찬 다른 배열입니다.

어떻게하면 JSON.NET에서이 작업을 수행 할 수 있습니까?

+1

가 읽어 보시기 바랍니다 [질문], (당신이 분명히 표시하는 JSON 유효하지 않습니다으로, ** 검증 **에 중점)는 [mcve]을 제공하고 당신이 시도 것을 공유 할 수 있습니다. – CodeCaster

+0

시도해 보셨습니까? 특정 문제가 있습니까? – Andrei

+0

먼저 유효한 JSON인지 확인하십시오. (힌트, 그렇지 않습니다.) – mason

답변

2

Json.Net의 LINQ-to-JSON API을 사용하여 작업을 수행 할 수 있습니다. .

[ 
    { 
    "blah": "nothing interesting here" 
    }, 
    [ 
    { 
     "id": 1, 
     "name": "foo", 
     "desc": "description of foo" 
    }, 
    { 
     "id": 2, 
     "name": "bar", 
     "desc": "blurb about bar" 
    }, 
    { 
     "id": 3, 
     "name": "baz", 
     "desc": "buzz about baz" 
    } 
    ] 
] 

첫째, 관심있는 내부 배열의 항목을 보관하는 클래스를 정의

public class Item 
{ 
    [JsonProperty("id")] 
    public int Id { get; set; } 

    [JsonProperty("name")] 
    public string Name { get; set; } 

    [JsonProperty("desc")] 
    public string Description { get; set; } 
} 
:

예를 위해,의 당신의 JSON은 다음과 같습니다 가정하자

이제 JSON을 구문 분석하여 JArray으로 만든 다음 하위 배열을 가져와 ToObject()을 사용하여 항목 목록으로 변환하면됩니다.

JArray ja = JArray.Parse(json); 
List<Item> list = ja[1].ToObject<List<Item>>(); 

거기에서 평상시처럼 항목 목록을 사용할 수 있습니다.

바이올린 : https://dotnetfiddle.net/CaFzux

+0

정말 고마워요! –

+0

괜찮습니다. 내가 도울 수있어서 기뻐. –

0

은 당신도 강력한 형식의 캐스팅을 통해 개체의 두 번째 세트를 얻을 수 있습니다 또는 동적으로, 여기에 동적으로 그 일의 예입니다

dynamic jsonArray = JArray.Parse(json);   
dynamic targetJsonObjects = jsonArray[1]; 
+1

디자인 타임에 구조를 알 수없는 상황에서만 동적을 사용해야합니다. – mason

0

는이 같은 단순한 모델을 시도 해 봤나은?

public class RootObject 
{ 
    public object IntroObject { get; set; } 
    public List<Item> Items { get; set; } 
} 

public class Item 
{ 
    public string WhatEverPropertyYouNeed{ get; set; } 
} 
+0

JSON의 바깥 부분이 객체가 아닌 배열이므로이 구조체는 실제로 작동하지 않습니다. –