2016-07-04 24 views
2

Ich habe eine Textdatei mit folgenden Formatdatenlesen Json Daten aus Textdatei C#

[ 
    { 
     "SponsorID": 1, 
     "FirstBAID": 7395836 
    }, 
    { 
     "SponsorID": 2, 
     "FirstBAID": 3509279, 
     "SecondBAID": 2947210 
    }, 
    { 
     "SponsorID": 3, 
     "FirstBAID": 1776294, 
     "SecondBAID": 6503843 
    }, 
    { 
     "SponsorID": 4, 
     "FirstBAID": 8014528, 
     "SecondBAID": 6203155 
    }, 
    { 
     "SponsorID": 5, 
     "FirstBAID": 5968769, 
     "SecondBAID": 7410195, 
     "ThirdBAID":8950170, 
    } 
] 

ich diese Daten als Liste lesen wollen & dann muss ich von SponsorID abfragen. Ich habe eine Klasse wie folgt erstellt

public class SponsorInfo 
{ 
    public decimal SponsorID { get; set; } 
    public decimal FirstBAID { get; set; } 
    public decimal SecondBAID { get; set; } 
    public decimal ThirdBAID { get; set; } 
} 

Nun, wie kann ich Textdatei Daten lesen SponsorInfo Klasse binden &?

+5

Sie müssen einen Bibliothekslink verwenden JSON.net - http://www.newtonsoft.com/json/help/html/linqtojson.htm – Phil

+0

Hier ein Beispiel von MSDN: https://msdn.microsoft.com/ en-us/library/system.web.script.serialization.javascriptserializer (v = vs.110) .aspx –

+0

können Sie sich http://stackoverflow.com/a/24887573/1466583 –

Antwort

5

Newtonsoft.Json Installieren nuget Paket von NuGet Paket-Manager-Konsole:

PM> Install-Package Newtonsoft.Json 

Dann:

var jsonText = File.ReadAllText("filepath"); 
var sponsors = JsonConvert.DeserializeObject<IList<SponsorInfo>>(jsonText); 

Zur Abfrage auf SponsorID können Sie LINQ verwenden:

var sponsor5 = sponsors.FirstOrDefault(x => x.SponsorID == 5); 

Wenn Sie Oft benötigen Sie einen Lookup von SponsorID, Sie könnten das Ergebnis in ein Dic umwandeln wo der Schlüssel ist SponsorID. Dadurch wird die Leistung verbessert, da für jede Suche nicht die gesamte Liste aufgelistet werden muss. Ich schlage auch vor, dass Sie den Typ von SponsorID zu einem int anstelle von decimal ändern.

var sponsorsById = sponsors.ToDictionary(x => x.SponsorID); 

Dann können Sie leicht zugänglich machen es mögen:

if (sponsorsById.ContainsKey(5)) 
    var sponsor5 = sponsorsById[5]; 
2

Sie müssen Newtonsoft.Json installieren und dann müssen Sie es verwenden:

using Newtonsoft.Json; 

class Program 
    { 
     public void LoadJson() 
     { 
      using (StreamReader r = new StreamReader("file.json")) 
      { 
       string json = r.ReadToEnd(); 
       List<SponsorInfo> items = JsonConvert.DeserializeObject<List<SponsorInfo>>(json); 
      } 
     } 


     public class SponsorInfo 
     { 
      public decimal SponsorID { get; set; } 
      public decimal FirstBAID { get; set; } 
      public decimal SecondBAID { get; set; } 
      public decimal ThirdBAID { get; set; } 
     } 




     static void Main(string[] args) 
     { 
      dynamic array = JsonConvert.DeserializeObject(json); 
      foreach (var item in array) 
      { 
       Console.WriteLine("{0} {1}", item.temp, item.vcc); 
      } 

     } 

    } 
+1

Der unbenutzte 'LoadJson' anschauen Methode ist irgendwie verwirrend. –

+0

humm ... richtig machen Sinn.; Ich kann dies entfernen und in Main hinzufügen, aber dann, denke ich, ich sollte es für die Person verwenden lassen.Vielen Dank für den Vorschlag zwischen und ich unterstütze Ihre Antwort so viel besser als ich. – Vicky

0

die Klasse Extend eine Liste erstellen Objekt

public class SponsorInfo 
{ 
    public decimal SponsorID { get; set; } 
    public decimal FirstBAID { get; set; } 
    public decimal SecondBAID { get; set; } 
    public decimal ThirdBAID { get; set; } 
} 
public class SponsorInfoList 
{ 
    public Dictionary<string, SponsorInfo> SIList { set; get; } 
} 

Deseria Lize die Datei als,

var obj = JsonConvert.DeserializeObject<SIList >(File.ReadAllText(FileName)); 

Dann Sie es lesen kann,

foreach(var listItem in res.SIList) 
{ 
    Console.WriteLine("SponsorID ={0}, FirstBAID ={1}, SecondBAID ={2}, ThirdBAID ={3}", listItem.SponsorID, listItem.FirstBAID, listItem.SecondBAID, listItem.ThirdBAID); 
} 

kann es syntaktische Fehler, aber der Ansatz bleibt gleich.

Fühlen Sie sich frei, eine Nachricht zu hinterlassen!

+0

Sie benötigen diese zusätzliche 'SponsorInfoList' nicht. –

-1

Sie müssen sich in Ihrem Objekt deserialisiert wie:

Sponsor spon = JsonConvert.DeserializeObject (json);

+0

Sie erhalten keine Liste von 'SponsorInfo'-Objekten. Siehe andere Antworten. –