如何在南希中将 JSON 打印到 C#

  • 本文关键字:JSON 打印 c# json nancy
  • 更新时间 :
  • 英文 :


我有一个.json文件叫做file.json。我想在屏幕上打印 JSON 文件在 URLlocalhost: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;
}

我猜你在追求这样的东西:

public string LoadJson()
{
StreamReader r = new StreamReader("file.json");
string json = r.ReadToEnd();
List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json);
return string.Join("rn", 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中命名公共属性,并使用相应标记的名称对其进行标记。

没有必要反序列化文件内容,然后使用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;
};

最新更新