【发布时间】:2018-08-03 13:31:26
【问题描述】:
我正在轮询 API,这些 API 以相同的格式返回不同类型的 JSON 字符串,这些字符串包含列表、列表内、列表内。这是一个例子:
[
{
"name": "string",
"production": true,
"start_timestamp": "string",
"end_timestamp": "string",
"width": 0,
"height": 0,
"scale": 0,
"floors": [
{
"number": 0,
"display_name": "string",
"map_image_url": "string",
"inside_image_url": "string",
"zone_maps": [
{
"name": "string",
"display_name": "string",
"zone_image_url": "string",
"zones": [
{
"name": "string",
"display_name": "string",
"color": "string"
}
]
}
]
}
]
}
]
我正在尝试为所有 API 创建一个动态方法,该方法可以获取第一个列表的所有属性的值并将它们连接成 csv 的字符串。然后,如果在这些属性中找到另一个列表,请再次执行相同的方法,直到没有更多列表为止。这是我当前的示例代码:
public static string DelimetedString(object obj)
{
List<string> lineItem = new List<string>();
Type myObject = obj.GetType();
foreach (var v in myObject.GetProperties())
{
var objType = v.PropertyType.Name;
if (objType.Contains("List"))
{
DelimetedString(v); //It is here where I would like to loop through the next list
}
else
{
var value = v.GetValue(obj, null);
if (value == null)
{
lineItem.Add("");
}
else
{
lineItem.Add(value.ToString());
}
}
}
return string.Join(",", lineItem);
}
最终目标是让列标题包含属性名称,以及此下每个属性的数据以分隔格式。提前感谢您的帮助!
编辑:对不起,我应该对此进行扩展。我确实使用 Newtonsoft 反序列化为 json 对象。
MyClass _myObject = JsonConvert.DeserializeObject<MyClass>(responseJson);
然后我将该对象发送到 DelimitedString() 函数。
【问题讨论】:
-
米切尔,你是怎么做到的?
标签: c# json properties generic-list