2015-08-22 8 views
14

kullanarak Json Telden Özellikler 'Kaldır Aşağıdaki JSON dizesi vardır:newtonsoft

ondan kimliği ve isEmployee özelliklerini kaldırmak ve sadece isim mülk bırakmak gerek
{ 
    "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 
} 

.

İşte

istenen sonuçtur:

bu Newtonsoft Json.NET kullanarak C# yapılabilir Nasıl
{ 
    "results":[ 
     { 
     "name":"Employee A" 
     }, 
     { 
     "name":"Employee B" 
     }, 
     { 
     "name":"Employee C" 
     }, 
     { 
     "name":"Contractor A" 
     }, 
     { 
     "name":"Contractor B" 
     } 
    ], 
    "totalItems":5 
} 

?

cevap

8
iki temel yaklaşım,

ya

  • bir JObject için çözümler vardır

    (örneğin JObject.Parse(json)); Geçiş sırasında Yuvalanmış JObject'leri güncelleyerek modify the object graph; Şimdi değiştirilmiş nesne grafiğini temsil eden orijinal JObject'i serileştirmek.

Ya

  • Deserialize JSON kesinlikle yazılan etmek nesneler ek özellikler olmadan. C# türlerinde bulunmayan özellikler sessizce bırakılacaktır. Daha sonra sadece serileştirilmiş nesneyi serileştirdi.
+1

Yukarıda belirtilen 2. yöntemi kullandım (JSON yapısını taklit eden C# nesnesine serpiştirmek, daha sonra JSON'a serileştirmek) ve harika çalıştı. – iCode

9

Örneğin

(bu sorunun anda oldu emin değilim) bir kaldırma yöntemi mevcut vardır:

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

veya tam giriş için

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(); 
    ;