Gop*_*ath 3 c# linq json json.net
我试图在 C# 中使用 Netwonsoft.JSON.Linq 来更改以下 JSON 中的“statusCode”值:
{
"disbursements":[
{
"id":"1f337641",
"contactId":"f5eb2",
"statusCode":166000005,
"amount":8,
"category":166000001
},
{
"id":"027a4762",
"contactId":"f5eb2038",
"statusCode":166000000,
"amount":4000,
"category":166000000
}
]
}
Run Code Online (Sandbox Code Playgroud)
因此,JSON 数据内部是:“disbursements”,它是 JSON 数组。我必须将数组中每个项目的“statusCode”更改为166000005. 我可以使用检索第一个的状态代码
JObject jsonText = JObject.Parse(bodyText);
var statusCode = (int)jsonText.SelectToken("disbursements[0].statusCode");
Run Code Online (Sandbox Code Playgroud)
但我需要一个带有循环或 LINQ 的解决方案来更改所有值,而不仅仅是第一个值。
以下代码设置或添加"statusCode": 166000005到支付数组中的每个条目:
var jsonText = JObject.Parse(bodyText);
foreach (var disbursement in jsonText.SelectTokens("disbursements[*]"))
{
disbursement["statusCode"] = 166000005;
}
Run Code Online (Sandbox Code Playgroud)
笔记:
查询字符串"disbursements[*]"包含JSONPath通配符运算符[*]。该运算符匹配父元素下的所有数组元素"disbursement"。
Json.NET 支持 JSONPath 语法,如使用JSONPath 查询 JSON中所述。
SelectTokens()使用而不是SelectToken()循环遍历多个可能的匹配。
项目JToken 设置器 disbursement["statusCode"] = 166000005将替换该"statusCode"属性(如果存在),如果不存在则添加它。
一个简单的原子值166000005可以直接设置到JToken层次结构中。对于复杂的 POCO,您需要先调用JToken.FromObject()将其序列化为 a JToken,然后再将其设置到层次结构中,例如:
disbursement["statusCode"] =
JToken.FromObject( new { oldValue = disbursement["statusCode"], newValue = 166000005 } );
Run Code Online (Sandbox Code Playgroud).Net fiddle工作示例。
| 归档时间: |
|
| 查看次数: |
8845 次 |
| 最近记录: |