Передача файла json в качестве параметра методу - PullRequest
0 голосов
/ 02 мая 2020

Я учусь работать с данными json с помощью Newtonsoft. 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 ]

1 голос
/ 02 мая 2020

Документация Newtonsoft Json. NET содержит два примера, показывающих, как десериализовать JSON из файла . Ниже приведены оба примера с небольшими изменениями, помогающими интегрироваться с вашим кодом.

Опция 1. Чтение JSON данных через JsonConvert

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 Чтение JSON данных через JsonSerializer

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 data

Указанные ниже классы созданы на основе вашего образца 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;
0 голосов
/ 02 мая 2020

JToken.Parse не принимает путь, он принимает фактическую строку json.

Вы можете получить содержимое файла с помощью File.ReadAllText.

Примерно так (check et c опущен):

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. Для получения дополнительной информации прочитайте это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...