当前位置: 首页 > news >正文

.NET 对象转Json的方式

.NET 对象转Json的方式

在.NET中将对象转换为JSON有多种方法,以下是常用的几种方式:

1. 使用 System.Text.Json (推荐,.NET Core 3.0+)

基本序列化

using System.Text.Json;public class Person
{public string Name { get; set; }public int Age { get; set; }public string Email { get; set; }
}// 对象转JSON
var person = new Person { Name = "张三", Age = 25, Email = "zhangsan@example.com" };
string jsonString = JsonSerializer.Serialize(person);
Console.WriteLine(jsonString);
// 输出: {"Name":"张三","Age":25,"Email":"zhangsan@example.com"}

带选项的序列化

var options = new JsonSerializerOptions
{WriteIndented = true, // 格式化输出PropertyNamingPolicy = JsonNamingPolicy.CamelCase // 驼峰命名
};string jsonString = JsonSerializer.Serialize(person, options);
Console.WriteLine(jsonString);
// 输出:
// {
//   "name": "张三",
//   "age": 25,
//   "email": "zhangsan@example.com"
// }

2. 使用 Newtonsoft.Json (Json.NET)

首先安装 NuGet 包:

Install-Package Newtonsoft.Json
using Newtonsoft.Json;public class Person
{public string Name { get; set; }public int Age { get; set; }public string Email { get; set; }
}// 基本序列化
var person = new Person { Name = "李四", Age = 30, Email = "lisi@example.com" };
string jsonString = JsonConvert.SerializeObject(person);
Console.WriteLine(jsonString);// 带格式的序列化
string formattedJson = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(formattedJson);

Newtonsoft.Json 高级用法

var settings = new JsonSerializerSettings
{Formatting = Formatting.Indented,NullValueHandling = NullValueHandling.Ignore,DateFormatString = "yyyy-MM-dd HH:mm:ss"
};string jsonString = JsonConvert.SerializeObject(person, settings);

3. 处理复杂对象

包含集合的对象

public class Department
{public string Name { get; set; }public List<Person> Employees { get; set; }
}var department = new Department
{Name = "技术部",Employees = new List<Person>{new Person { Name = "王五", Age = 28, Email = "wangwu@example.com" },new Person { Name = "赵六", Age = 32, Email = "zhaoliu@example.com" }}
};string jsonString = JsonSerializer.Serialize(department, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(jsonString);

匿名对象序列化

var anonymousObject = new
{Id = 1,Description = "测试对象",CreateTime = DateTime.Now
};string jsonString = JsonSerializer.Serialize(anonymousObject);
Console.WriteLine(jsonString);

4. 自定义序列化选项

System.Text.Json 自定义

var options = new JsonSerializerOptions
{WriteIndented = true,PropertyNamingPolicy = JsonNamingPolicy.CamelCase,DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull,Converters = { new JsonStringEnumConverter() } // 枚举转换为字符串
};string jsonString = JsonSerializer.Serialize(person, options);

使用特性控制序列化

public class Product
{[JsonPropertyName("productName")] // System.Text.Jsonpublic string Name { get; set; }[JsonIgnore] // 忽略该属性public string InternalCode { get; set; }[JsonPropertyOrder(1)] // 属性顺序public decimal Price { get; set; }
}

5. 性能优化

使用源生成器 (System.Text.Json)

[JsonSerializable(typeof(Person))]
[JsonSerializable(typeof(List<Person>))]
public partial class MyJsonContext : JsonSerializerContext
{
}// 使用源生成器进行序列化
var person = new Person { Name = "测试", Age = 25 };
string jsonString = JsonSerializer.Serialize(person, MyJsonContext.Default.Person);

选择建议

  • 新项目:推荐使用 System.Text.Json,性能更好,无需额外依赖
  • 现有项目:如果已经在使用 Newtonsoft.Json,可以继续使用
  • 复杂场景:Newtonsoft.Json 功能更丰富,支持更多复杂场景

两种方法都很常用,根据项目需求和个人偏好选择即可。

http://www.dtcms.com/a/540985.html

相关文章:

  • 广西住建局官方网站大数据营销的应用领域
  • Linux ioctl 深度剖析:从原理到实践
  • 网站备案流程解答做最漂亮的网站
  • LED驱动电路(三)
  • Keil工程编译垃圾清理
  • 同城跑腿APP源码开发技术全景:即时订单、骑手定位与路线优化算法
  • 【数据工程】15. Stream Query Processing
  • 鄂州网站设计效果wordpress comment_form_after
  • 爱网站关键词查询工具潍坊营销网站
  • java程序生成pdf或wod乱码
  • 做网站和游戏是如何赚钱crm系统开发
  • 网页pdf下载攻略--以混元上传的pdf为例
  • AI在处理扫描版PDF时准确率低,如何提升?
  • 网站做成软件免费wordpress 首页制作
  • 所有网站打不开深圳做app网站的公司名称
  • centos 7 redhat7 升级内核 升级内核到5.4版本 202510试过可以成功
  • 什么是TC8?
  • EtherNet/IP转ProfiNet智能网关配置指南:西门子1500PLC与多台机器人通讯
  • 【仿真测试】基于FPGA的完整BPSK通信链路实现,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计
  • 晨控CK-UR08-E01与汇川AC系列PLC配置EtherNet/IP通讯连接手册
  • 稀疏Ax=b超静定方程的常用解法介绍
  • AnyBurn 多功能光盘刻录软件 v6.5
  • FPGA在AI时代的定位?
  • 网站是如何盈利的如何做一个营销型网站
  • 宁波网站推广合作商平面广告创意设计
  • 融资台州网站快速优化排名
  • p2p网贷网站建设公司晋州住房保障建设局网站
  • 2025年--Lc218-145. 二叉树的后序遍历(非递归版,栈,带测试用例)-Java版
  • docker ubuntu22.04更新报错问题——筑梦之路
  • 网站维护排名报价单模板怎么做