如何在 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}";
}
我所做的修改如下:
- 实现了
ToString
方法以在方法 中呈现 Item
class
- 在
LoadJson
方法中,为列表中的每一项返回ToString
方法的所有结果的连接字符串
如果您想要的是显示 JSON 格式,您可以我们 JSON 序列化或者实际上只按原样显示文件的内容:)
此外,我建议遵循 C# 约定并使用 PascalCasing 命名 public Item
中的属性,并使用相应标签的名称对其进行标记。
我有一个 .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}";
}
我所做的修改如下:
- 实现了
ToString
方法以在方法 中呈现 - 在
LoadJson
方法中,为列表中的每一项返回ToString
方法的所有结果的连接字符串
Item
class
如果您想要的是显示 JSON 格式,您可以我们 JSON 序列化或者实际上只按原样显示文件的内容:)
此外,我建议遵循 C# 约定并使用 PascalCasing 命名 public Item
中的属性,并使用相应标签的名称对其进行标记。