newtonsoft name jsonproperty jsonconverter deserialize deserializar decorators c# json.net

c# - name - newtonsoft json attributes



Eliminar propiedades de una cadena Json usando newtonsoft (2)

Tengo la siguiente cadena JSON:

{ "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 }

Necesito eliminar de él las propiedades id e isEmployee y dejar solo la propiedad name.

Aquí está el resultado deseado:

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

¿Cómo se puede hacer esto en C # usando Newtonsoft JSON.NET?


Hay dos enfoques básicos,

Ya sea

O

  • Deserialice el JSON a objetos fuertemente tipados sin las propiedades adicionales. Las propiedades que no están presentes en los tipos C # se eliminarán silenciosamente. Luego serializa el objeto justamente deserializado.

hay un método de eliminación presente (no estoy seguro si estaba en el momento de esta pregunta)

Por ejemplo:

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

o para su entrada exacta

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