如何在 nancy 中将 JSON 打印到 C#

How to print JSON to C# in nancy

我有一个 .json 文件叫做 file.json。当 URL 为 localhost:8080/data 时,我想在屏幕上打印 JSON 文件具有的姓名和年龄等数据。这是我尝试过的方法,但在网页下方出现错误 System.Collections.Generic.List`1[NancyWinForm.MainMod+项目]

  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;

        }

没有必要反序列化您的文件内容,然后使用 ToString() 将其转换回 json 这也不会将您的列表序列化为 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;
    };

我猜你在寻找类似的东西:

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 方法以在方法
  2. 中呈现 Item class
  3. LoadJson方法中,为列表中的每一项返回ToString方法的所有结果的连接字符串

如果您想要的是显示 JSON 格式,您可以我们 JSON 序列化或者实际上只按原样显示文件的内容:)

此外,我建议遵循 C# 约定并使用 PascalCasing 命名 public Item 中的属性,并使用相应标签的名称对其进行标记。