2017-12-08 28 views
0

Newtonsoft를 처음 사용하고 json 파일을 deserialise하여 특정 데이터 포인트를 쿼리하려고합니다. 다음은 json의 샘플입니다.Deserialise Json 파일 (newtonsoft 및 linq 쿼리 포함)

[ 
    { 
     "reward_type": "1", 
     "rejected": "0", 
     "user_id": "538653", 
     "granted": "0" 
    }, 
    { 
     "reward_type": "5", 
     "rejected": "0", 
     "user_id": "536345", 
     "granted": "1" 
    }, 
    { 
     "reward_type": "5", 
     "rejected": "0", 
     "user_id": "539493", 
     "granted": "1" 
    } 
] 

각 유형 다음에 값을 쿼리하려고합니다. 나는 며칠 동안 Json.net의 문서를 고심하려고 노력해 왔지만 파일을 비 직렬화하는 예제를 찾는 데 어려움을 겪고있다.

다음은 내가 파일을 구문 분석하는 데 사용한 것입니다.

InitializeComponent(); 
     JArray adData1 = JArray.Parse(File.ReadAllText(@"c:\ads.json")); 
     using (StreamReader file = File.OpenText(@"c:\ads.json")) 
     using (JsonTextReader reader = new JsonTextReader(file)) 
     { 
      JsonSerializer serializer = new JsonSerializer(); 
      JArray adData2 = (JArray)serializer.Deserialize(file, typeof(JArray)); 

      JObject rewardType = (JObject)adData2[1]; 
      label1.Text = rewardType.ToString(); 
     } 

도움을 주시면 감사하겠습니다.

+0

가장 좋은 방법 (IMHO)을하는 DTO/POCO 객체로 역 직렬화하기 (그것에 기본 속성을 가진 간단한 C# 클래스) 그리고 나서 그것/그들에 대한 linq 쿼리. https://www.newtonsoft.com/json/help/html/DeserializeObject.htm – granadaCoder

+0

익명 형식을 사용할 수 있습니다. IMHO를 유지하기가 어렵습니다. https://www.newtonsoft.com/json/help/html/DeserializeAnonymousType.htm – granadaCoder

+0

JSON 샘플에 유효한 대괄호 배열을 만드는 둘러싸인 대괄호'[]'가 없습니다. JSON 전체에 대괄호가 실제로 있으면 질문에 표시해야합니다. 거기에 없으면 JSON이 유효하지 않으며 파싱에 문제가있는 이유 중 하나 일 수 있습니다. –

답변

1

제안 사항 :

데이터가 공통 구조 인 경우에만 사용할 수 있습니다. 당신은 당신이 좋아하는 경우 POCO의 데이터 유형을 대체 할 수

POCO

public class Stuff { 
    public string reward_type { get; set; } 
    public string rejected { get; set; } 
    public string user_id { get; set; } 
    public string granted { get; set; } 
} 

사용 방법 :

public void doThings() { 
// var s = File.ReadAllText("yourfilename.json"); 
    var s = @"{ 
""reward_type"": ""1"", 
""rejected"": ""0"", 
""user_id"": ""538653"", 
""granted"": ""0"" 
}, 
{ 
""reward_type"": ""5"", 
""rejected"": ""0"", 
""user_id"": ""536345"", 
""granted"": ""1"" 
}, 
{ 
""reward_type"": ""5"", 
""rejected"": ""0"", 
""user_id"": ""539493"", 
""granted"": ""1"" 
}"; 
    // [] is needed to make it recognize it as list 
    var listOfStuff = JsonConvert.DeserializeObject<List<Stuff>>("["+s+"]"); 
    foreach (var item in listOfStuff) 
    { 
     Console.WriteLine(item.user_id); 
    } 

}