对象JSON序列化方法
实现对象JSON序列化方式有:反射和不用反射。
下面是不用反射的实现方式:
1.Test类,需要实现JSON序列化的类,这个类需要实现ToJson()方法,当然你可以写一个IJson接口让每个实现ToJson()方法的类继承IJson接口,接口可以定义成public interface IJson{string ToJson();}。
1 2 3 4 5 6 7 8 9 | public class Test : BaseModel<Test> { public string ID { get ; set ; } public string Name { get ; set ; } //public string ToJson() //{ // return "{'ID':'" + this.ID + "','Name':'" + this.Name + "'}"; //} } |
其实这ToJson方法可写在一个基类里,实现代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public abstract class BaseModel<TYPE> where TYPE : BaseModel<TYPE>, new () { public virtual string ToJson() { TYPE instance = GetInstance(); StringBuilder sb = new StringBuilder(); sb.Append( "{" ); foreach ( var property in typeof (TYPE).GetProperties()) { string name = property.Name; object value = property.GetValue(instance, null ); sb.Append( "'" + name + "':'" + value + "'," ); } return sb.ToString().TrimEnd( ',' ) + "}" ; } private TYPE GetInstance() { TYPE instance = new TYPE(); instance = this as TYPE; return instance; } } |
2.ListExtension类,这是一个List扩展类,有一个ToJson()扩展方法,实现List对象JSON序列化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public static class ListExtension { public static string ToJson( this IList list) { StringBuilder sb = new StringBuilder(); sb.Append( "[" ); foreach ( var o in list) { string json = o.GetType().InvokeMember( "ToJson" , System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null , o, null ).ToString(); sb.Append(json + "," ); } return sb.ToString().TrimEnd( ',' ) + "]" ; } } |
3.测试用例
1 2 3 4 5 6 7 8 9 10 11 12 | public partial class _Default : System.Web.UI.Page { protected void Page_Load( object sender, EventArgs e) { List<Test> tests = new List<Test>() { new Test{ID= "1" ,Name= "Test1" }, new Test{ID= "2" ,Name= "Test2" } }; Response.Write(tests.ToJson()); } } |
4.这种实现方式比用反射稍麻烦点,虽然每个需要JSON序列化的类手动写ToJson()方法,没有使用反射写一个方法来的方便,但是性能比反射要高些。
分类:
03 .NET技术
Known 是基于 Blazor 轻量级、跨平台、低代码、易扩展的插件开发框架。
源码:https://gitee.com/known/Known
源码:https://github.com/known/Known
如果对您有帮助,点击⭐Star⭐关注 ,感谢支持开源!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现