2016-10-17 4 views
-1

Okay, also habe ich überall hingeschaut und konnte keine Antwort finden, wie das geht.C# Wie kann ich meine JSON-Datei mit Newtonsoft deserialisieren?

Hier ist meine JSON-Datei

{ 
     "item": { 
      "icon": "icon.png", 
      "icon_large": "icon_large.png", 
      "id": 453, 
      "type": "misc", 
      "typeIcon": "icontype.png", 
      "name": "Item name", 
      "description": "item description", 
      "current": { 
       "trend": "neutral", 
       "price": 174 
      }, 
      "today": { 
       "trend": "positive", 
       "price": "+2" 
      }, 
      "premium": "false" 
      } 
    } 

ich diese Klasse als einen Weg versucht haben, es zu deserialisieren (ich nur die Sache des Namen und Preis aus dem „aktuellen“ Baum benötigen)

public class MyItem 
    { 
     public Dictionary<string, Item> item;  
    } 
    public class Item 
    { 
     public string name; 
     public Dictionary<string, Current> current; 
    } 
    public class Current 
    { 
     public string price; 
    } 

und dies wird von meiner Haupt-Klasse namens

private void buttonAddItemToWatcher_Click(object sender, EventArgs e) 
    { 
     string url = "link to json above;   
     string json = new WebClient().DownloadString(url); 

     MyItem newItem = new MyItem(); 

     JsonConvert.PopulateObject(json, newItem); 

    } 

aber ich habe diesen Fehler

Eine nicht behandelte Ausnahme des Typs 'Newtonsoft.Json.JsonSerializationException> trat bei Newtonsoft.Json.dll

Zusätzliche Informationen: Fehlerwert Umwandlung> "icon.png" 'RS_GrandExchangeWatcher.Item' eingeben. Pfad ‚item.icon‘, Zeile 1, Position 95.

ich nicht ganz bin zu verstehen, wie ich meine Klasse, um meine MyItem Klasse mit dem json aufzufüllen einrichten I zur Verfügung gestellt haben

+0

Ich ziehe den Deserializer mit 'Dictionary ' Art und starken Typ eine Festigkeitsklasse zu verwenden, wenn Ich möchte nur bestimmte Elemente daraus machen. – DataHerder

+1

Automatisches Erstellen von Typen von JSON über Tool wie VS (http://StackOverflow.com/Questions/18526659/How-to-show-the-Paste-Json-Class-in-Simal-Studio-2012-when-clicking-on -Paste/18527793 # 18527793) oder http://json2csharp.com/ wird dein Leben viel einfacher machen. Code, der derzeit in dem Post vorhanden ist, hat keine Beziehung zu JSON, das Sie analysieren möchten. –

+0

Vielen Dank! Das hat meine Probleme gelöst! – ThatBenderGuy

Antwort

2

Ihre C# Klasse passt nicht zu Ihrem JSON.

Kopieren Sie Ihre JSON, gehen Sie zu Visual Studio 2015 eine CS-Datei öffnen, im Menü Bearbeiten ->Paste Special ->Einfügen JSON als Klassen.

How to paste as JSON

und Sie erhalten entsprechende Klassen C#:

public class MyItem 
{ 
    public Item item { get; set; } 
} 

public class Item 
{ 
    public string icon { get; set; } 
    public string icon_large { get; set; } 
    public int id { get; set; } 
    public string type { get; set; } 
    public string typeIcon { get; set; } 
    public string name { get; set; } 
    public string description { get; set; } 
    public Current current { get; set; } 
    public Today today { get; set; } 
    public string premium { get; set; } 
} 

public class Current 
{ 
    public string trend { get; set; } 
    public int price { get; set; } 
} 

public class Today 
{ 
    public string trend { get; set; } 
    public string price { get; set; } 
} 
0

Ihr Schema entspricht nicht Ihren JSON

Als MyItem Ihr Wurzelobjekt, es sagt, dass es eine Eigenschaft "item" mit einem hat Wert des Typs Dictionary<string, Item>, aber Ihre Item Klasse hat name und current Eigenschaften nur während in Ihrem JSON es hat mehrere andere wie "icon" und andere.

Sie könnten versuchen, alles als Dictionary<string, dynamic> Parsen laufen und nur analysieren, um die current Eigenschaft den Wert Ihrer Current Klasse

Verwandte Themen