【问题标题】:Adding new Jtoken to Json Jtoken将新的 Jtoken 添加到 Json Jtoken
【发布时间】:2021-06-24 17:04:38
【问题描述】:

我有以下 Json

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "required",
        "message": "Login Required",
        "locationType": "header",
        "location": "Authorization"
      }
    ],
    "code": 401,
    "message": "Login Required"
  }
}

我想做的是在"message": "Login Required" 下添加一个新的JToken "RetryMessage": "Failed after 10 retries" 之类的东西

我发现这个How do you add a JToken to an JObject? 不太有效,我认为这是因为错误是一个标记而不是一个对象,但我不确定。

我尝试过的:

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

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

Newtonsoft.Json.Linq.JProperty cannot have multiple values.

【问题讨论】:

标签: c# json


【解决方案1】:

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

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

使用您的示例 JSON,结果:

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "required",
        "message": "Login Required",
        "locationType": "header",
        "location": "Authorization"
      }
    ],
    "code": 401,
    "message": "Login Required",
    "retryMessage": "Unknown"
  }
}

【讨论】:

    【解决方案2】:

    虽然 Jon Skeet 的回答是 100% 正确的,但在您的情况下,您可以在不明确指定确切路径的情况下完成同样的事情:

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

    【讨论】:

    • 这个示例帮助我弄清楚如何在 Json jsonObject.AddFirst(new JProperty("Pid", 231)) 中添加一个新属性作为第一个属性;
    【解决方案3】:

    当您有多个属性时,这似乎可以正常工作。并不是说我喜欢这些,因为它感觉很乱。

    var test = JToken.Parse($"{{ \"Item1\": \"Value1\", \"Item2\": \"Value2\", \"Item3\": \"Value3\" }}");
    jtokenList.Add(test);
    

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 2020-05-15
      • 2016-08-21
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      相关资源
      最近更新 更多