将新的Jtoken添加到Json Jtoken

DaI*_*mTo 9 c# json

我有以下Json

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "required",
        "message": "Login Required",
        "locationType": "header",
        "location": "Authorization"
      }
    ],
    "code": 401,
    "message": "Login Required"
  }
}
Run Code Online (Sandbox Code Playgroud)

我所试图做的是增加一个新的JToken"message": "Login Required""RetryMessage": "Failed after 10 retries"

我发现了这个如何将一个JToken添加到JObject?我认为这不是很有效,因为错误是一个令牌,而不是一个对象,但我不确定.

我尝试过的:

var JsonObj = JObject.Parse(response);
var RetryMessageJson = JToken.Parse(@"{ ""RetryMessage"" : ""UnKnown""}");
JsonObj["error"]["message"].AddAfterSelf(RetryMessageJson);
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上面的几个版本的代码,他们都回来了以下错误消息:

Newtonsoft.Json.Linq.JProperty cannot have multiple values.
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 20

除非排序真的很重要,否则我怀疑你只想让它成为错误的另一个属性:

// Variable names edited to follow normal C# conventions
var jsonResponse = JObject.Parse(response);
jsonResponse["error"]["retryMessage"] = "Unknown";
Run Code Online (Sandbox Code Playgroud)

使用您的示例JSON,结果是:

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "required",
        "message": "Login Required",
        "locationType": "header",
        "location": "Authorization"
      }
    ],
    "code": 401,
    "message": "Login Required",
    "retryMessage": "Unknown"
  }
}
Run Code Online (Sandbox Code Playgroud)


Kaj*_*Kaj 8

尽管Jon Skeet的回答是100%正确的,但在您的情况下,您可以完成同样的事情,而无需明确指定确切的路径:

var jsonResponse = JObject.Parse(response);
var newProperty = new JProperty("RetryMessage", "Failed after 10 retries");
jsonResponse.Last.AddAfterSelf(newProperty);
Run Code Online (Sandbox Code Playgroud)

  • 这个示例帮助我弄清楚如何添加新属性作为 Json jsonObject.AddFirst(new JProperty("Pid", 231)); 中的第一个属性; (2认同)