2016-04-12 12 views
-1

Ich habe diese IDictionary Erklärung: IDictionary<string, string> trace;
Innerhalb davon möchte ich eine Liste von Element durch eine json Deserialisierung zurück speichern, tatsächlich ich tun, um diese wie:Wie speichern Sie mehrere Elemente in IDictionary?

var obj = JsonConvert.DeserializeObject<List<RootObject>>(responseText); 

foreach (var item in obj) 
{ 
    trace["date"] = item.trace.details.date; 
    trace["type"] = item.trace.details.type; 

    foreach (var trace in item.trace.context.context) 
    { 
      trace["context"] = JsonConvert.SerializeObject(trace); 
    } 
} 

nun diesen Code gut funktioniert, aber nur das retten letzter Punkt der Iteration, dies ist der Fall, wenn ich über das Element iterieren die date, type etc... ersetzt werden, aber ich möchte das Element speichern nicht ersetzen es in jeder neuen Iteration.
Wie kann dies mit IDictionary?

Beachten Sie:trace.x ist der Name der Klasse, die den JSer deserialize.

Weitere Frage: Vielleicht ist die Verwendung von IDictionary keine gute Idee, um dies zu erreichen?

+0

Sie können finden, 'Lookup' ist eine Alternative' https://msdn.microsoft.com/en-us/library/bb460184 (v = vs.110) .aspx' –

+1

Sie benötigen eindeutige Schlüssel für jedes 'Element' und wieder für jede "Spur". Oder Sie können stattdessen 'IDictionary > 'tun. Oder erstellen Sie eine benutzerdefinierte Klasse mit einem date- und type-Parameter und dem Kontext als Liste und verwenden Sie diese als Werttyp für Ihre Wörterbücher. – juharr

+0

@juharr Ich habe es bereits versucht, aber ich habe folgende Nachricht: Implicit cast 'string' in 'System.Collection.Generic.List ' – Sandokan

Antwort

4

Sieht aus wie Sie besser dran wäre, eine eigene Klasse verwenden, etwa so:

public class TraceInfo 
{ 
    public string Date { get; set; } 
    public string Type { get; set; } 
    public List<string> ContextItems { get; set; } 
} 

Dann gilt für jeden Wert in obj, erstellen Sie ein TraceInfo Objekt mit new TraceInfo() und seine Eigenschaften festgelegt.

Sie können sie dann in einem List<TraceInfo> oder in einem Dictionary<string, TraceInfo> speichern, die Wahl liegt bei Ihnen.

+0

Gute Lösung dafür, danke! – Sandokan

Verwandte Themen