将json文件转换为字符串

时间:2017-12-01 00:15:34

标签: c# json

我正在尝试捕获来自随机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文件的结构,在这种情况下我不知道。

2 个答案:

答案 0 :(得分:3)

这是dynamicExpandoObject的确切用例!在这里,您可以将json反序列化为对象,然后遍历对象的属性(查找如何使用ExpandoObjects)。

var expandoConverter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json, expandoConverter);

或者,如果您只想将磁盘中的json作为字符串读取,请使用string json = File.ReadAllText(filePathAndName);

答案 1 :(得分:0)

Eriks的答案非常值得提及ExpandoObjectdynamicFile来电。它得到了我的+1。

我向ErikEs添加了答案,要求包含该软件包并包含最小运行程序所需的详细信息。

此代码位于我的Program.cs文件中,用于Visual Studio 2017中的控制台应用程序项目类型。您还应该在程序包管理器控制台中运行install-package newtonsoft.json。此命令将加载newtonsoft.json.11.0.1 pakcage。 .Net Framework是4.6.1。

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.Dynamic;
using System.IO;

namespace ReadJson
{
    class Program
    {
        static void Main(string[] args)
        {
            string filePath = "<full path to json file>";
            string json = File.ReadAllText(filePath);

            var expandoConverter = new ExpandoObjectConverter();
            dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json, expandoConverter);
            //do more with your dynamic object here...
        }
    }
}