- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用字符串路径将新的 JProperty 添加到 JSON 对象。我正在检索现有路径,然后在其附近添加一个新值。似乎无论我如何选择 token ,或者无论我调用什么 Add 方法(最相关的是 AddAfterSelf)或者我提供什么作为新值,我都会收到异常:
Run-time exception (line 9): Newtonsoft.Json.Linq.JProperty cannot have multiple values.
您可以在此处看到此失败:https://dotnetfiddle.net/mnvmOI
为什么我不能在这种情况下添加 JProperty?
using System;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
JObject test = JObject.Parse("{\"test\":123,\"deeper\":{\"another\":\"value\"}}");
test.SelectToken("deeper.another").AddAfterSelf(new JProperty("new name","new value"));
}
}
最佳答案
抛出异常的原因是SelectToken()
返回属性的 JValue
而不是 JProperty
本身。具体来说,它返回 JProperty
所拥有的 JValue
,名称为 "another"
。如果你这样做,你可以看到这个:
Console.WriteLine("Result type: {0}; result parent type: {1}", result.GetType(), result.Parent.GetType());
结果
Result type: Newtonsoft.Json.Linq.JValue; result parent type: Newtonsoft.Json.Linq.JProperty
如果您进一步从 JToken
层次结构的顶部打印对象类型到 SelectToken()
返回的值,您将看到 JValue
标记包含在 JProperty
标记中:
Depth: 0, Type: JObject
Depth: 1, Type: JProperty: deeper
Depth: 2, Type: JObject
Depth: 3, Type: JProperty: another
Depth: 4, Type: JValue: value
Json.NET documentation还表示 SelectToken()
返回所选属性的值:
string name = (string)o.SelectToken("Manufacturers[0].Name");
Console.WriteLine(name);
// Acme Co
由于 JProperty
不能有多个值,当您尝试在层次结构中的值之后立即添加 JProperty
时,您正在尝试将其添加为其父级 JProperty
的子级,它抛出异常。
相反,将其添加到父级的父级:
test.SelectToken("deeper.another").Parent.AddAfterSelf(new JProperty("new name","new value"));
样本 fiddle显示以上所有内容。
关于c# - 为什么 AddAfterSelf 在与 SelectToken 一起使用时返回 'JProperty cannot have multiple values'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47747906/
我想向已解析的 Json 对象添加自定义参数。自定义参数由多个值组成,需要一个Json格式的对象数组。 当它被添加到 jsonObj 时,它被视为一个完整的字符串而不是一个数组。 var objs
如果对象包含特定变量,是否可以创建新的 JProperty?例如: string object = "var2"; var json = new JObject( new JProperty(
有一个很大的 JSON 文件(大约一千行)。任务是更新现有的 JProperties,或在结构中的特定位置添加新的 JProperties。新文本的位置基于 JToken.Path 属性。例如,这是
我被困在某件事上: 我使用 JObject.Load 反序列化了一个 JSON 文件: // get the JSON into an object JObject jsonObject = JObj
给定两个 JToken: { "Users": { "Name": "Carl" } } 和 { "Users": [ { "Name": "Carl" }, {"Name": "Peter"} ]
我有以下属性 { "bad": { "Login": "someLogin", "Street": "someStreet", "House": "1", "F
我目前正在使用以下扩展方法来执行此任务,但似乎应该有一些现有的包含方法或扩展来执行此任务(或至少是其中的一个子集)。如果 Json.NET 中没有任何内容,那么推荐的过程是什么,或者我将如何更改下面的
我希望你们能帮助我。我想提取 JSON 文件中的每个 ID,但是我收到以下异常错误: Cannot access child value on Newtonsoft.Json.Linq.JProper
我需要获取 JSON { "question":"q1", "answers": { 1:"ans1", 2:"ans2", 3:"ans3"
我正在尝试从以下流中解析 json 值: {"id": "tag:search.xxxxx.com,2005:xxxxxxxxxxx"} {"body": "acordei (:"} {"verb":
在 JSON.net 中,如何遍历 JObject 键子项的 JProperties? 代码: JObject json = JObject.Parse(jsonstring); var develo
我想使用字符串路径将新的 JProperty 添加到 JSON 对象。我正在检索现有路径,然后在其附近添加一个新值。似乎无论我如何选择 token ,或者无论我调用什么 Add 方法(最相关的是 Ad
我正在尝试以这种格式反序列化 JSON: { "data": [ { "installed": 1, "user_likes": 1,
我正在尝试重新创建这个 json: { "request": { " TestRequest": { "OrderID": {
目前正在尝试使用 fixer.io API 在 C# 中创建货币转换。 我在从 Twitter API 解析 JSON 时使用了与下面类似的方法,并且没有任何问题,我不完全确定这里发生了什么。 API
我正在尝试建立 Mike Jansen 的 JIRA REST Client ,我正在尝试提取 JIRA 版本信息。我是 JSON 的新手,所以我不确定这只是格式问题还是什么。 调试时,我有以下标记:
我有一个包含 Json 数据的 JObject 对象。我需要收集具有 "state": true 的所有 KeyValuePairs。在我读取值之前,我想确保 JObject 至少有一个 KeyVal
所以我试图通过将 json 对象读取为 JObject 来控制反序列化,删除一些字段,然后使用 Json.Net 再次将其反序列化为我的目标对象。 .问题是,每当我尝试删除字段时,都会收到错误消息:
我是一名优秀的程序员,十分优秀!