Как напечатать JSON на C # в Нанси - PullRequest
0 голосов
/ 07 сентября 2018

У меня .json файл называется file.json.Я хотел бы напечатать на экране такие данные, как имя и возраст, которые есть у файла JSON, когда URL-адрес localhost:8080/data.Вот что я попробовал, и я получаю сообщение об ошибке ниже на веб-странице System.Collections.Generic.List`1 [NancyWinForm.MainMod + Item]

  Get["/data"] = x =>
            {
               return LoadJson();
            };        
        }
        public string LoadJson()
        {
            StreamReader r = new StreamReader("file.json");
            string json = r.ReadToEnd();
           List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json);
            String items2 = items.ToString();
            return items2;

        }
        public class Item
        {
            public int age;
            public string name;

        }

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Полагаю, вы ищете что-то вроде:

public string LoadJson()
{
    StreamReader r = new StreamReader("file.json");
    string json = r.ReadToEnd();
    List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json);
    return string.Join("\r\n", items.Select(i => i.ToString()).ToArray());
}

public class Item
{
    public int age;
    public string name;

    public override string ToString() => $"Age: {age}, Name: {name}";
}

Я внес следующие изменения:

  1. Реализован метод ToString для представления класса Item в методе
  2. В методе LoadJson возвращает объединенную строку для всех результатов метода ToString для каждого элемента в списке

Если вместо этого вы хотели отобразить формат JSON, вы можете использовать сериализацию JSON или просто отобразить содержимое файла как есть:)

Также я рекомендую следовать соглашению C # и использовать PascalCasing для именования открытых свойств в Item и пометить его именем соответствующих тегов.

0 голосов
/ 07 сентября 2018

Нет смысла десериализовать содержимое вашего файла и затем преобразовать его обратно в json, используя ToString() Это также не сериализует ваш список в строку json.

Вместо этого попробуйте следующее:

Get["/data", true] = async (param, cancellationToken) =>
    {
        string json;
        try
        {
            using (var sr = new StreamReader("file.json"))
            {
                json = await sr.ReadToEndAsync();
                // if you want to project your data into another form you 
                // can do this, as @Bishoy suggested
                var itemList = JsonConvert.DeserializeObject<List<Item>>(json);
                json = string.Join(Environment.NewLine, 
                         itemList.Select(x => $"Age:{x.Age}, Name: {x.Name}"));
            }
        }
        catch (Exception e)
        {
            return HttpStatusCode.InternalServerError;
        }
        return json;
    };
...