zuordnen So habe ich die JSON unten, dass ich in Klassen deseralisieren wollen, damit ich damit arbeiten kann. Aber die Probleme ist, dass die beiden oberen Felder sind eine andere Art zu der ganze Restkann nicht herausfinden, wie diese JSON in C# Klassen
"items": {
"averageItemLevel": 718,
"averageItemLevelEquipped": 716,
"head": { ... },
"chest": { ... },
"feet": { ... },
"hands": { ... }
}
Wo ...
ist eine der Item-Klasse unten, aber das Problem ist, dass zwei der Felder sind ints und der Rest sind Item
, es gibt ungefähr 20 Felder insgesamt. Also, was ich tun möchte, ist, sie in eine Dictionary<string, Item>
zu setzen, aber die 2 int-Felder hindern mich daran, es in diese zu deseralisieren. Ich verwende JavaScriptSerializer.Deserialize<T>()
, um dies zu tun.
Ich könnte jedes Element wie seine eigene Klasse mit dem Namen des Elements als der Name der Klasse haben, aber ich finde, dass es sehr schlecht ist, so viel jedes Mal wiederholend, auch sehr schwer mit später seit ich zu arbeiten kann nicht über die Felder iterieren, wo ich eine Dictionary
. Irgendeine Idee, wie ich das überwinden könnte?
public class Item
{
public ItemDetails itemDetails { get; set; }
public int id { get; set; }
public string name { get; set; }
public string icon { get; set; }
public int quality { get; set; }
public int itemLevel { get; set; }
public TooltipParams tooltipParams { get; set; }
public List<Stat> stats { get; set; }
public int armor { get; set; }
public string context { get; set; }
public List<int> bonusLists { get; set; }
}
Update: aus den Kommentaren ich mit dieser Lösung kam
JObject jsonObject = JObject.Parse(json);
jsonObject["averageItemLevel"] = int.Parse(jsonObject["items"]["averageItemLevel"].ToString());
jsonObject["averageItemLevelEquipped"] = int.Parse(jsonObject["items"]["averageItemLevelEquipped"].ToString());
jsonObject["items"]["averageItemLevel"].Parent.Remove();
jsonObject["items"]["averageItemLevelEquipped"].Parent.Remove();
var finalJson = jsonObject.ToString(Newtonsoft.Json.Formatting.None);
var character = _serializer.Deserialize<Character>(finalJson);
character.progression.raids.RemoveAll(x => x.name != "My House");
return character
Wenn Sie die Klassenroute herunterfahren, gibt es Tools, die Sie einfach in den JSON einfügen und es generiert die Klassen für Sie. Hier ist ein solches Werkzeug: http://jsonutils.com/ – Nkosi
@Nkosi Ja, ich bin mir dieser Art von Werkzeugen bewusst, so groß wie sie sind, werden sie einfach eine Klasse für jedes 'Item' machen, wie ich erwähnt habe, was es macht eher chaotisch und schwer mit den Daten zu arbeiten – Toxicable
Ok ich verstehe. Sie könnten versuchen Dictionary 'und sehen, ob es die anderen komplexen Objekte als Wörterbücher sowie –
Nkosi