Json.netRenameAttribute我有一个表示JSON的字符串,我想使用JSON.NET重命名一些属性。我需要一个泛型函数来处理任何JSON。类似于:publicstaticvoidRename(JContainercontainer,Dictionarymapping){foreach(JTokenelincontainer.Children()){JPropertyp=elasJProperty;if(el!=null&&mapping.ContainsKey(p.Name)){//**RENAMETHISNODE!!**}//递归重命名节点JContainerpcont=elasJContainer;如果(pcont!=null){重命名(pcont,映射);}}}如何??我建议使用重命名的属性重建JSON。我认为您不必担心速度损失,因为这通常不是问题。这是你如何做的。publicstaticJTokenRename(JTokenjson,Dictionarymap){returnRename(json,name=>map.ContainsKey(name)?map[name]:name);}publicstaticJTokenRename(JTokenjson,Funcmap){JPropertyprop=jsonasJProperty;if(prop!=null){returnnewJProperty(map(prop.Name),Rename(prop.Value,map));}JArrayarr=jsonasJArray;如果(arr!=null){varcont=arr。Select(the=>Rename(the,map));返回新的JArray(续);}JObjecto=json作为JObject;if(o!=null){varcont=o.Properties().Select(el=>Rename(el,map));返回新的JObject(续);}返回json;}默认值:vars=@"{""A"":{""B"":1,""Test"":""123"",""C"":{""Test"":["1"","2"","3""]}}}";varjson=JObject.Parse(s);varrenamed=Rename(json,name=>name=="Test"?"TestRenamed":name);renamed.ToString().Dump();//LINQPad输出vardict=newDictionary{{"Test","TestRenamed"}};varrenamedDict=Rename(json,dict);renamedDict.ToString()。倾倒();//LINQPad输出我们使用这种方法您可以使用JObject的SelectToken()来查找所需的属性。是的,它确实支持JsonPath。以上就是C#学习教程:Json.net重命名属性分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望你多多关注——publicstaticclassNewtonsoftExtensions{publicstaticvoidRename(thisJTokentoken,stringnewName){varparent=token.Parent;if(parent==null)thrownewInvalidOperationException("Theparentismissing.");varnewToken=newJProperty(newName,token);parent.Replace(newToken);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
