2015-08-22 20 views
14

mit habe ich folgenden JSON-String:entfernen Eigenschaften aus einem JSON-String newtonsoft

{ 
    "results":[ 
     { 
     "id":11, 
     "name":"Employee A", 
     "isEmployee":true 
     }, 
     { 
     "id":12, 
     "name":"Employee B", 
     "isEmployee":true 
     }, 
     { 
     "id":13, 
     "name":"Employee C", 
     "isEmployee":true 
     }, 
     { 
     "id":14, 
     "name":"Contractor A", 
     "isEmployee":false 
     }, 
     { 
     "id":15, 
     "name":"Contractor B", 
     "isEmployee":false 
     } 
    ], 
    "totalItems":5 
} 

ich von ihm die ID und isEmployee Eigenschaften entfernen muß und nur die Namen Eigenschaft verlassen.

Hier ist das gewünschte Ergebnis:

{ 
    "results":[ 
     { 
     "name":"Employee A" 
     }, 
     { 
     "name":"Employee B" 
     }, 
     { 
     "name":"Employee C" 
     }, 
     { 
     "name":"Contractor A" 
     }, 
     { 
     "name":"Contractor B" 
     } 
    ], 
    "totalItems":5 
} 

Wie dies in C# Newtonsoft JSON.NET verwenden kann getan werden?

Antwort

8

Es gibt zwei grundlegende Ansätze,

Entweder

  • Parse es zu einem JObject (zB JObject.Parse(json)); modify the object graph durch Aktualisieren der verschachtelten JObjects beim Traversieren; Serialisieren Sie das ursprüngliche JObject, das jetzt das geänderte Objektdiagramm darstellt.

Oder

  • Deserialize die JSON zu stark typisierte Objekte ohne die zusätzlichen Eigenschaften. Die Eigenschaften, die in den C# -Typen nicht vorhanden sind, werden automatisch gelöscht. Dann wurde das gerade deserialisierte Objekt serialisiert.
+1

Ich habe die zweite oben genannte Methode verwendet (deserialize zu C# -Objekt, das JSON-Struktur nachahmt, dann zu JSON serialisiert) und es hat großartig funktioniert. – iCode

9

gibt es eine Remove-Methode vorhanden ist (nicht sicher, ob es zum Zeitpunkt dieser Frage war)

Zum Beispiel:

var raw = "your json text"; 
var o = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(raw); 
o.Property("totalItems").Remove() 
return o.ToString(); 

oder für Ihre genaue Eingabe

var parent = JsonConvert.DeserializeObject<JObject>(raw); 
((JArray)parent.Property("results").Value) 
    .Select(jo => (JObject)jo) 
    .ToList() 
    .ForEach(x => 
     x 
      .Properties() 
      .ToList() 
      .ForEach(p => 
      { 
       if (p.Name != "name") 
        p.Remove(); 
      })) 
    //.Dump(); 
    ; 
Verwandte Themen