栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Json.net中收到错误“无法从Newtonsoft.Json.Linq.JProperty添加或删除项目”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Json.net中收到错误“无法从Newtonsoft.Json.Linq.JProperty添加或删除项目”

假设

Values
是a
List<MyObject>
,您的
MyObject
课程如下所示:

class MyObject{    public string Time { get; set; }    public int Level { get; set; }}

您可以将所有代码替换为以下代码,以获得所需的结果:

string json = File.ReadAllText(fileName);Values = JToken.Parse(json)["docs"].ToObject<List<MyObject>>();

之所以可行,是因为Json.Net默认会忽略缺少的属性。由于

MyObject
该类不包含
_id
要反序列化的属性,因此您无需跳过试图将其从JSON中删除的箍。

解释为什么

Remove()
不起作用

JToken.Remove()``JToken
从其父级中删除一个。
JProperty
从父母
JObject
中删除子女或
JToken
从子女中删除子女是合法的
JArray
。但是,您无法从中删除值
JProperty
。一个
JProperty
必须始终只有一个值。

当您要求时,

token["_id"]
可以获取被调用的
,而不是其本身。因此,如果尝试调用该值,将会得到一个错误。要使其按照您的方式工作,您需要使用以下代码:
JProperty``_id``JProperty``Remove()``Parent

if (inner["_id"] != null)    inner["_id"].Parent.Remove();

这样说:“查找名称为“的属性

_id
并给我值。如果存在,请获取该值的父级(属性),然后从其父级(包含
JObject
)中删除它”。

一种更直接的方法是使用该

Property()
方法直接访问属性。但是,此方法仅在上
JObject
不可用
JToken
,因此您需要将的声明更改
inner
为a
JObject
或将其强制转换为:

foreach (JObject inner in token["docs"].Children<JObject>()){    JProperty idProp = inner.Property("_id");    if (idProp != null)        idProp.Remove();    ...}

最后,如注释中所述,如果您使用的是C#6或更高版本,则可以使用null条件运算符将代码缩短一些:

    inner.Property("_id")?.Remove();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415684.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号