如何使用C#将控制台输出内容转换为JSON格式输出
实现方案
思路
要把自定义对象集合序列化为指定格式的JSON,直接使用.NET官方提供的JSON序列化工具即可,不需要手动拼接字符串(避免出现JSON格式错误)。
具体实现步骤
先在代码顶部引入对应命名空间:
- 如果是.NET Core 3.0+、.NET 5+ 版本,直接使用内置的
System.Text.Json:using System.Text.Json; - 如果是.NET Framework 版本,可以使用Newtonsoft.Json(需先通过NuGet安装Newtonsoft.Json包),对应命名空间为
using Newtonsoft.Json;
- 如果是.NET Core 3.0+、.NET 5+ 版本,直接使用内置的
改造
Names方法:构造包含Name属性的匿名对象包裹你的姓名列表,再直接序列化为JSON字符串输出即可。
完整修改后代码(基于System.Text.Json实现)
using System; using System.Collections.Generic; using System.Text.Json; class Program { static void Main(string[] args) { Names(); Console.ReadLine(); } public static void Names() { List<Name> names = new List<Name>(); names.Add( new Name() { FName = "Sri",LName="Kumari"}); names.Add(new Name() { FName = "Pavan", LName = "Kumar" }); names.Add(new Name() { FName = "Harish", LName = "Raj" }); // 构造符合输出结构的匿名对象 var outputObj = new { Name = names }; // 配置序列化选项,设置为缩进格式化输出 var jsonOptions = new JsonSerializerOptions { WriteIndented = true }; // 序列化得到JSON字符串 string jsonResult = JsonSerializer.Serialize(outputObj, jsonOptions); // 输出到控制台 Console.WriteLine(jsonResult); } } public class Name { public string FName { get; set; } public string LName { get; set; } }
如果使用Newtonsoft.Json实现,只需要把序列化部分的代码替换为:
string jsonResult = JsonConvert.SerializeObject(outputObj, Formatting.Indented);
输出结果
运行后控制台输出的符合规范的JSON格式如下(你给出的示例JSON存在引号缺失、内容重复的笔误,以下为正确输出):
{ "Name": [ { "FName": "Sri", "LName": "Kumari" }, { "FName": "Pavan", "LName": "Kumar" }, { "FName": "Harish", "LName": "Raj" } ] }
如果你不需要缩进格式化输出,只需要把对应序列化配置里的缩进参数设为关闭,即可得到压缩后的JSON字符串。
内容的提问来源于stack exchange,提问作者ashok
相关产品推荐
相关产品推荐

