我有以下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
}
我需要从它删除id和isEmployee属性,只留下name属性。
下面是期望的结果:{
"results":[
{
"name":"Employee A"
},
{
"name":"Employee B"
},
{
"name":"Employee C"
},
{
"name":"Contractor A"
},
{
"name":"Contractor B"
}
],
"totalItems":5
}
如何在c#中使用Newtonsoft JSON.NET实现?
有一个Remove方法存在(不确定是否在这个问题的时候)
例如:
var raw = "your json text";
var o = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(raw);
o.Property("totalItems").Remove()
return o.ToString();
或者输入
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();
;
有两种基本方法,
- 解析它到一个jobobject(例如
JObject.Parse(json)
);通过在遍历时更新嵌套的对象来修改对象图;序列化现在表示修改后的对象图的原始jobobject。
或
- 将JSON反序列化为强类型对象,不带附加属性。c#类型中不存在的属性将被静默删除。然后序列化刚刚反序列化的对象。