我正在 try catch 来自随机 Json 文件的所有节点的名称和值,但我不知道其结构(由用户上传)。
我可以循环遍历 json 字符串并获取我需要的信息,但如何从文件开始?如果我想反序列化它,我相信我需要一个类来保存该数据(而且我不知道文件结构)。
以下是我如何循环 json 字符串中的元素:
string json = @"{
'CPU': 'Intel',
'PSU': '500W',
'Drives': [
'DVD read/writer'
/*(broken)*/,
'500 gigabyte hard drive',
'200 gigabype hard drive'
]
}";
JsonTextReader reader = new JsonTextReader(new StringReader(json));
while (reader.Read())
{
if (reader.Value != null)
{
Console.WriteLine("Token: {0}, Value: {1}", reader.TokenType, reader.Value);
}
else
{
Console.WriteLine("Token: {0}", reader.TokenType);
}
}
如何从文件中读取并将其设置为可由上面的代码处理的字符串?这听起来像是一个基本问题,但几个小时后我仍然在努力解决这个问题。我所看到的一切都希望您知道 Json 文件的结构,但在本例中我不知道。
最佳答案
这正是 dynamic
和 ExpandoObject
的用途!在这里,您可以将 JSON 反序列化为对象,然后遍历该对象的属性(在线查找如何使用 ExpandoObjects)。
var expandoConverter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json, expandoConverter);
或者,如果您只是想以字符串形式从磁盘读取 json,则使用 string json = File.ReadAllText(filePathAndName)
;
上面的代码片段需要安装 NewtonSoft 包。
关于c# - 将 json 文件转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47584742/