我有一个表示JSON的字符串,我想使用JSON.NET重命名某些属性。我需要用于任何JSON的通用函数。就像是:
public static void Rename(JContainer container, Dictiontionary<string, string> mapping)
{
foreach (JToken el in container.Children())
{
JProperty p = el as JProperty;
if(el != null && mapping.ContainsKey(p.Name))
{
// **RENAME THIS NODE!!**
}
// recursively rename nodes
JContainer pcont = el as JContainer;
if(pcont != null)
{
Rename(pcont, mapping);
}
}
}
怎么做??
我建议您使用重命名的属性来重构您的JSON。我认为您不必担心速度惩罚,因为通常这不是问题。这是您的操作方法。
public static JToken Rename(JToken json, Dictionary<string, string> map)
{
return Rename(json, name => map.ContainsKey(name) ? map[name] : name);
}
public static JToken Rename(JToken json, Func<string, string> map)
{
JProperty prop = json as JProperty;
if (prop != null)
{
return new JProperty(map(prop.Name), Rename(prop.Value, map));
}
JArray arr = json as JArray;
if (arr != null)
{
var cont = arr.Select(el => Rename(el, map));
return new JArray(cont);
}
JObject o = json as JObject;
if (o != null)
{
var cont = o.Properties().Select(el => Rename(el, map));
return new JObject(cont);
}
return json;
}
这是用法示例:
var s = @"{ ""A"": { ""B"": 1, ""Test"": ""123"", ""C"": { ""Test"": [ ""1"", ""2"", ""3"" ] } } }";
var json = JObject.Parse(s);
var renamed = Rename(json, name => name == "Test" ? "TestRenamed" : name);
renamed.ToString().Dump(); // LINQPad output
var dict = new Dictionary<string, string> { { "Test", "TestRenamed"} };
var renamedDict = Rename(json, dict);
renamedDict.ToString().Dump(); // LINQPad output
问题内容: 我正在使用JSON.NET,我想从XML转换为JSON。 我正在使用JsonConvert.SerializeXNode(node),我注意到我的json对象具有在其名称前面带有@的属性: 因此,例如:如果我有: JSON对象是: 为什么在JSON中插入“ @”,有什么方法可以避免插入“ @”字符? 问题答案: 我认为这就是json.net关于@符号的工作方式。您始终可以在json字符
我有非常大的 cosmos-db 集合,我想重命名这个集合的一些属性,我发现我可以实现 C# 应用程序,它在集合文档上循环,并替换它们每个文档的文档,但是根据集合大小,这个解决方案将花费很长时间。Azure 门户上是否有任何其他解决方案(函数或存储过程)或 SDK,它们将以更少的时间为我们提供相同的功能? 例子: 旧文档{代码,CName,CAddress } 我想将属性重命名为{Customer
问题内容: 在Postgresql 9.5中,是否可以重命名jsonb字段中的属性? 例如: 应该重命名为 问题答案: 在使用删除( - )并连接(||)运算符 ,如:
问题内容: 我使用来自Newtonsoft的。 但是我想自己命名json对象。 我尝试了该属性 也没有工作…可以自己命名json-objetcs / arrays吗? 问题答案: 我想我找到了解决方案: 将其重命名。
问题内容: 我正在用C#编写.NET Framework 3.5。 我正在尝试将某些Json解析为JObject。 Json如下: 当我尝试将此Json解析为JObject时,JObject仅了解LargeBox。SmallBox和MedBox的信息丢失。显然,这是因为它将“ TBox”解释为一个属性,并且该属性已被覆盖。 我从Delphi编码的服务中收到此Json。我正在尝试为该服务创建C#代理
操作步骤: 菜单栏: Refactor --> Rename 快捷键: Mac: fn + Shift + F6