必须编写一个通用方法,该方法将采用任何结构的json并向具有数据的每个元素添加新属性
1号结构,(人)
输入Json数据,
{'name':'sam', 'age': 12}
预期的输出
{'name':'sam', 'name_xyz': 'Rob', 'age': 12, 'age_xyz': 15}
2号结构,(带地址的人)
输入json数据,
{ 'name': 'sam', address : { 'city': 'fishers', 'zip': 23456 } }
预期的输出
{'name': 'sam', 'name_xyz': 'rob', address : { 'city': 'fishers', 'city_xyz': 'fishers', 'zip': 23456, 'zip_xyz': 678768} }
3号结构(人员)
输入json数据,
[{'name': 'sam'}, {'name':'rex'}]
预期输出,
[{'name': 'sam', 'name_xyz': 'felix'}, {'name':'rex', 'name_xyz' : 'bob'}]
我有一些使用NewtonSoft进行定义的模型的东西,但是我需要通用的方法来解析和评估任何类型的json数据。
var jsonData = JsonConvert.SerializeObject(modelData);
var jArray = JArray.Parse(jsonData) as JArray;
dynamic persons = jArray;
foreach (dynamic person in persons)
{
var name = person.name;
var newname = Getnewname(name);
person.Add(new JProperty("name_xyz", newname));
var age = person.age;
var newage = GetnewAge(age);
person.Add(new JProperty("age_xyz", newage));
}
var result = persons.ToString();
要考虑的事情,
答案 0 :(得分:0)
我遇到了类似的情况,我使用“ 嵌套字典”方法解决了该问题。在强类型实体的舒适区工作总是很高兴,但是有时候创建 C#类可能会变得很麻烦。这就是我的情况。
像字典一样处理整个JSON,其中一个或多个键可能存储另一个Dictionary。而且这可能会持续几个层次。 Jobject.Parse 方法对我有用。 JObject 的作用类似于键值集合,并且随着遍历的深入,您可以递归地检索更多的 JObject 实例。
Newtonsoft参考-平面词典 https://www.newtonsoft.com/json/help/html/SerializingCollections.htm
这不适用于像您这样的嵌套结构。
Newtonsoft代码段-解析为JObject
string json="[{'name': 'sam', 'name_xyz': 'felix'}, {'name':'rex', 'name_xyz' : 'bob'}]"
JObject o = JObject.Parse(json);
https://www.newtonsoft.com/json/help/html/ParseJsonObject.htm
Newtonsoft参考-JObject https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JObject.htm
有关使用JObject而不是硬输入的更多示例
https://www.newtonsoft.com/json/help/html/QueryingLINQtoJSON.htm