将json文件作为参数传递给方法

时间:2020-05-02 15:54:34

标签: c# json.net

我正在学习如何使用Newtonsoft.Json处理json数据。

我将有效的json文件存储在控制台应用程序的文件夹中,并调用 一种将处理json文件的方法。

        static void Main(string[] args)
        {
            IEnumerable<IEnumerable<string>> result;
            string pathToFile = @"C:\DevelopmentJson\ConsoleApp1\File\my_test.json";

            MyReader objReader = new MyReader();
            result = objReader.Export(pathToFile).ToList();

            Console.WriteLine("Hello");
        }

这是我班级中被调用的方法。

        public IEnumerable<IEnumerable<string>> Export(string json)
        {
            var document = JToken.Parse(json);

            var data = new List<List<string>>();
            .....
            return data;
        }

我开始觉得我无法使用pathToFile作为json文件的路径。

我开始在此行下面收到错误消息[var document = JToken.Parse(json);]

Newtonsoft.Json.JsonReaderException: 
'Unexpected character encountered while parsing value: C. Path '', line 0, position 0.'

如何解决此错误消息?

2 个答案:

答案 0 :(得分:1)

Newtonsoft Json.NET documentation有两个示例显示了如何deserialize JSON from a file。以下两个示例都进行了少量修改,以帮助与您的代码集成。

选项1.通过JsonConvert读取JSON数据

var pathToFile = @"C:\DevelopmentJson\ConsoleApp1\File\my_test.json";

// read file into a string and deserialize JSON to a type
var dataFromJsonConvert = JsonConvert.DeserializeObject<MyData>(File.ReadAllText(pathToFile));

// dataFromJsonConvert now holds your JSON data from file

选项2。通过JsonSerializer读取JSON数据

var pathToFile = @"C:\DevelopmentJson\ConsoleApp1\File\my_test.json";

// deserialize JSON directly from a file
using (StreamReader file = File.OpenText(pathToFile))
{
    var serializer = new JsonSerializer();
    var dataFromJsonSerializer = (IEnumerable<IEnumerable<string>>)serializer.Deserialize(file, typeof(MyData));

    // dataFromJsonSerializer now holds your JSON data from file
}

示例演示如何利用答案

static void Main(string[] args)
{
    var pathToFile = "C:\DevelopmentJson\ConsoleApp1\File\my_test.json";

    var fileJsonRaw = File.ReadAllText(pathToFile))

    var objReader = new MyReader();
    var fileJsonParsed = objReader.Export(fileJsonRaw).ToList();

    Console.WriteLine("Hello");
}

public MyData Export(string json)
{
    return JsonConvert.DeserializeObject<MyData>(json);
}

从您的JSON数据生成的类

以下类是从示例JSON生成的。在答案中使用这些类来演示完整的解决方案。

public partial class MyData
{
    [JsonProperty("UpdatedDay")]
    public string UpdatedDay { get; set; }

    [JsonProperty("UpdatedUser")]
    public string UpdatedUser { get; set; }

    [JsonProperty("solution")]
    public Solution[] Solution { get; set; }
}

public partial class Solution
{
    [JsonProperty("title")]
    public string Title { get; set; }

    [JsonProperty("description")]
    public string Description { get; set; }

    [JsonProperty("fields")]
    public Field[] Fields { get; set; }
}

public partial class Field
{
    [JsonProperty("firstname")]
    public string Firstname { get; set; }

    [JsonProperty("lastiname", NullValueHandling = NullValueHandling.Ignore)]
    public string Lastiname { get; set; }

    [JsonProperty("required")]
    public bool FieldRequired { get; set; }

    [JsonProperty("lastname", NullValueHandling = NullValueHandling.Ignore)]
    public string Lastname { get; set; }
}

注意:以下使用语句是必需的。

using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

答案 1 :(得分:0)

JToken.Parse不采用路径,而是采用实际的json字符串。

您可以使用File.ReadAllText获取文件的内容。

这样的事情(省略检查等):

public IEnumerable<IEnumerable<string>> Export(string path)
{
    string json = File.ReadAllText(path);
    var document = JToken.Parse(json);

    var data = new List<List<string>>();
    .....
    return data;
}

请注意,使用json.net解析文件有更好的方法。有关更多信息,请阅读this

相关问题