2015-08-22 9 views
14

Mam następujący ciąg JSON:Usuń właściwości z JSON String użyciu 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 
} 

muszę usunąć z niej właściwości id i isEmployee i pozostawić tylko właściwość name.

Oto pożądany rezultat:

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

Jak można to zrobić w C# z wykorzystaniem Newtonsoft Json.NET?

Odpowiedz

8

Istnieją dwa podstawowe podejścia,

Albo

  • zanalizować go do JObject (np JObject.Parse(json)); modify the object graph poprzez aktualizację zagnieżdżonych obiektów JO podczas przemieszczania; serializuje oryginalny obiekt JObject, który obecnie reprezentuje zmodyfikowany wykres obiektów.

Albo

  • deserializować JSON do silnie wpisany obiekty bez dodatkowe właściwości. Właściwości nieobecne w typach C# zostaną po cichu upuszczone. Następnie serializowano właśnie deserializowany obiekt.
+1

Użyłem drugiej metody wspomnianej powyżej (deserialize do obiektu C#, który naśladuje strukturę JSON, a następnie serializuje do JSON) i działał świetnie. – iCode

9

jest obecna metoda remove (nie wiem, czy to było w czasie tej kwestii)

Na przykład:

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

lub dla dokładnym wejściu

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(); 
    ; 
Powiązane problemy