解析任意结构(第n个深度)的json的通用方法c#
必须编写一个通用方法,该方法将接受任何结构的json,并向每个包含数据的元素添加新属性 结构#1(人) 输入Json数据解析任意结构(第n个深度)的json的通用方法c#,c#,json,json.net,C#,Json,Json.net,必须编写一个通用方法,该方法将接受任何结构的json,并向每个包含数据的元素添加新属性 结构#1(人) 输入Json数据 {'name':'sam', 'age': 12} 预期产量 {'name':'sam', 'name_xyz': 'Rob', 'age': 12, 'age_xyz': 15} {'name': 'sam', 'name_xyz': 'rob', address : { 'city': 'fishers', 'city_xyz': 'fishers', 'zip':
{'name':'sam', 'age': 12}
预期产量
{'name':'sam', 'name_xyz': 'Rob', 'age': 12, 'age_xyz': 15}
{'name': 'sam', 'name_xyz': 'rob', address : { 'city': 'fishers', 'city_xyz': 'fishers', 'zip': 23456, 'zip_xyz': 678768} }
结构#2,(有地址的人)
输入json数据
{ 'name': 'sam', address : { 'city': 'fishers', 'zip': 23456 } }
[{'name': 'sam'}, {'name':'rex'}]
预期产量
{'name':'sam', 'name_xyz': 'Rob', 'age': 12, 'age_xyz': 15}
{'name': 'sam', 'name_xyz': 'rob', address : { 'city': 'fishers', 'city_xyz': 'fishers', 'zip': 23456, 'zip_xyz': 678768} }
结构#3(个人的)
输入json数据
{ 'name': 'sam', address : { 'city': 'fishers', 'zip': 23456 } }
[{'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();
<>要考虑的事情,
我遇到过类似的情况,我用“嵌套字典”的方法解决了它。虽然在强类型实体的舒适区工作总是一件令人愉快的事情,但有时创建C类可能会变得太麻烦。这就是我的处境 将整个JSON视为一个字典,其中一个或多个键可能存储另一个字典。这可能会持续几个层次。方法Jobject.Parse对我有效。JObject的工作方式类似于键值集合,您可以在深入遍历时递归地检索更多JObject实例 Newtonsoft参考-平面字典 对于像您这样的嵌套结构,这将不能很好地工作 Newtonsoft代码片段-作为作业对象进行解析
string json="[{'name': 'sam', 'name_xyz': 'felix'}, {'name':'rex', 'name_xyz' : 'bob'}]"
JObject o = JObject.Parse(json);
Newtonsoft参考-JObject
更多关于使用JObject而不是硬输入的示例
我不清楚这篇文章中的问题是什么。想要阅读任何类型/结构的json,然后使用命名约定“existingproperty_xyz”将新属性添加到每个现有属性中,并使用结构中的新值#2预期输出,看起来您并没有在考虑中所述的同一级别创建新对象#2。更像是替换它或只是遍历它并添加更多属性。除此之外,您可以使用一些递归方法来实现这一点。是的,请不要更正新对象,只需遍历到并添加更多新属性。我正在寻找那个递归函数。@alans正确的方法是遍历并添加更多属性。