2017-12-08 9 views
0

Ich bin neu in Newtonsoft und ich versuche meine JSON-Datei deserialise dann bestimmte Datenpunkte davon abzufragen. Hier ist ein Beispiel für den JSON.Deserialise JSON-Datei mit newtonsoft und Abfrage mit 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" 
    } 
] 

Ich versuche, die Werte nach jeder Art abzufragen. Ich habe versucht, ein paar Tage lang die Dokumentation für Json.net einzupacken, aber ich habe Probleme, Beispiele für die Deserialisierung von Dateien zu finden.

Hier ist, was ich verwendet habe, um die Datei zu analysieren.

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(); 
     } 

Jede Hilfe wird geschätzt.

+0

Ihre beste Wette (IMHO) in ein DTO/POCO Objekt deserialisieren (einfache C# -Klasse mit nur grundlegenden Eigenschaften darauf) und dann linq Abfrage gegen sie. Siehe https://www.newtonsoft.com/json/help/html/DeserializeObject.htm – granadaCoder

+0

Sie könnten anonyme Typen verwenden, denke ich. Schwieriger, IMHO zu erhalten: https://www.newtonsoft.com/json/help/html/DeserializeAnonymousType.htm – granadaCoder

+0

Ihrem JSON-Beispiel fehlen die einschließenden eckigen Klammern '[]', die es zu einem gültigen Array von Objekten machen würden. Wenn die Klammern tatsächlich im gesamten JSON vorhanden sind, sollten Sie sie in Ihrer Frage anzeigen. Wenn sie nicht dort sind, dann ist Ihr JSON ungültig, und das könnte ein Teil des Grundes sein, warum Sie Probleme haben, es zu analysieren. –

Antwort

1

Aus den Anregungen:

Es ist nur nutzbar, wenn die Daten, die eine gemeinsame Struktur haben. Sie können die Datentypen in der POCO ersetzen, wenn Sie

Die POCO wie

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; } 
} 

Wie zu verwenden:

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); 
    } 

}