【问题标题】:Change value of property改变财产的价值
【发布时间】:2021-08-05 19:47:25
【问题描述】:

我在更改 JSON 属性的值时遇到问题。

我想检查我的 JSON 属性是否为空对象,如果是,请将值更改为 null。我想出了如何检查属性是否为空对象,但我不知道如何更改值。

我的 JSON:

{
    "payload": {}
}

我的目标:

{
    "payload": null
}

到目前为止我所拥有的:

JToken payloadProperty = data["payload"];
if (payloadProperty != null && payloadProperty.Type == JTokenType.Object && !payloadProperty.HasValues)
{
    // WHAT TO PUT HERE TO SET "payload" TO NULL
}

【问题讨论】:

  • 这是什么意思?你想要这个 Json 做什么
  • 替换后你想做什么?反序列化它?重新序列化吗?还是别的什么?

标签: c# json json.net


【解决方案1】:

这一切的目的是什么?你可以只使用字符串函数

myJson="{ \"payload\": {} }";

myJson=myJson.Replace("\"payload\": {}", "\"payload\": null");

或者如果您只有有效负载,或者其他属性有相同的问题,您可以试试这个

myJson=myJson.Replace("{}", "null");

【讨论】:

  • 我想过,但我无法控制传入的 JSON,所以我不知道是否有任何前导/尾随/内部空格。 "{" 和 "}" 甚至可以在不同的行上。这就是我使用 Newtonsoft 库的原因。
  • 那么你必须展示整个类的有效载荷。你的 json 是只有一个属性有效负载还是其他东西?
  • 没必要。我已经使用 JSON.NET 库来查找 JToken。我只需要了解如何使用 Newtonsoft 的 JSON.NET 库将值设置为 null。对 JSON 字符串进行字符串操作并不是最好的方法。
  • 如果您只有一个对象,我认为不需要更复杂的算法。这就是为什么您必须发布真正的 json 样本的原因。这是堆栈溢出规则,您不想破坏它们。没有看到真正的代码很难回答。如果您想自己回答,请不要发布问题和其他人的时间。
  • JSON 的其余部分不相关。它对使用 JSON.NET 库更新该属性没有任何影响。
【解决方案2】:

我想出了解决办法。我能够直接将“有效负载”设置为空。我最初认为它是某个 JSON.NET 类的一些方法或属性。

我刚刚做了这个

JToken payloadProperty = data["payload"];
if (payloadProperty != null && payloadProperty.Type == JTokenType.Object)
{
    data["payload"] = null;
}

这导致不需要知道可能有额外空格等的确切字符串内容。

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 2014-12-05
    • 1970-01-01
    相关资源
    最近更新 更多