[英]JSON Deserialize (Newtonsoft) with same name properties and array
[英]Replace Json properties with NewtonSoft
不知道從哪里開始,所以我沒有任何示例代碼。
我需要更改 json 文檔中的屬性名稱。
var json = (@"{""id"":""12"",
""title"":""My Title"",
""Chunks"":[
{
""id"":""137"",
""title"":""Title"",
""description"":""null"",
""selections"":[
{
""id"":""169"",
""title"":""Choice"",
""sort_order"":""null"",
""questions"":[
]
}
]
}
]
}
}
}");
我需要將值為 12 的“id”更改為“document_id”並保留其他 id。 是否有像 NewtonSoft 這樣的 C# 庫允許您更改屬性而不是屬性值。 似乎是一個常見的場景,但我還沒有看到任何接近我想要做的事情。 我想我可以將 json 轉換為字符串並進行替換,但這似乎不太優雅。
使用Newtonsoft.Json.Linq.JObject
的方法如下所示:
var obj = JObject.Parse(json);
obj["document_id"] = obj["id"]; // create new property called "document_id"
obj.Remove("id"); // remove the "id" property
Console.WriteLine(obj);
另請注意,您的 JSON 無效。 它最后有兩個額外的}
。
假設您希望在可能有多個節點的鍵為“id”且值為“12”時替換所有鍵,您可以使用 Linq 來識別具有鍵“Id”和值“12”的令牌,然后使用 Add /Remove 方法用於創建具有不同名稱的新節點。
例如,
JToken node = JToken.Parse(json);
var jObjectsWithTitle = node
.SelectTokens("$..*")
.OfType<JObject>()
.Where(x => x.Property("id") != null && Convert.ToInt32(x.Property("id").Value) == 12);
foreach(var item in jObjectsWithTitle)
{
item.TryGetValue("id",out var currentValue);
item.Add("document_id",currentValue);
item.Remove("id");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.