利用JsonConvert.SerializeObject()实现类对象的json化
现阶段的项目是采用前后端分离的思想,前端使用的是Angular.JS,后端使用ABP框架,在后端我们通过WebAPI技术来向前端提供json数据。以前是通过MVC来写前端的代码,感觉后端有点在控制前端的节奏,一些少量的后端代码还是需要在HTML页面中写的,这次采用的这种模式,前端不需要写一点后端的C#代码,只负责写自己页面,至于说后端,只需要提供统一的json格式数据就可以,不需要管我前端如何展示。就是这样的情况,下面我们来看下如何将后端的数据json化。
后端数据转换为json
假设前端需要如下的数据格式:那么我们后端提供的josn格式就应该是这样的,这就利用到数据格式的转换了。
那么我们定义相关的类,看如何实现这样的格式。
- /// <summary>
- /// 第一大类
- /// </summary>
- public class TreeView
- {
- [JsonProperty("id")]
- public int Id { get; set; }
- [JsonProperty("text")]
- public string Text { get; set; }
- [JsonProperty("children")]
- public IList<TreeChildrenView> Childrens{ get; set; }
- }
- /// <summary>
- /// 第一大类中包含的第二大类
- /// </summary>
- public class TreeChildrenView
- {
- [JsonProperty("id")]
- public int Id { get; set; }
- [JsonProperty("text")]
- public string Text { get; set; }
- [JsonProperty("children")]
- public IList<Tree2ChildrenView> Childrens { get; set; }
- }
- /// <summary>
- /// 第二大类包含的第三大类
- /// </summary>
- public class Tree2ChildrenView
- {
- [JsonProperty("id")]
- public int Id { get; set; }
- [JsonProperty("text")]
- public string Text { get; set; }
- }
我们后端需要进行josn化,就需要引用Newtonsoft.Json此类库。
- JsonConvert.SerializeObject();
下面看我们的代码。
- static void Main(string[] args)
- {
- var treeView = new TreeView()
- {
- Id=1,
- Text = "陕西",
- };
- var childrenTree = new TreeChildrenView()
- {
- Id=2,
- Text = "宝鸡市"
- };
- var chchTree = new Tree2ChildrenView()
- {
- Id=3,
- Text = "眉县"
- };
- childrenTree.Childrens = new List<Tree2ChildrenView>();
- childrenTree.Childrens.Add(chchTree);
- treeView.Childrens=new List<TreeChildrenView>();
- treeView.Childrens.Add(childrenTree);
- string json = JsonConvert.SerializeObject(treeView);
- Console.WriteLine(json);
- Console.ReadLine();
- }
我们可以看到只使用了一句转换代码。我们就可以得到具体的json数据。
解释
- 属性上面的标签 :[JsonProperty("id")]
意思是在json过程中将大写的Id转换为小写的。其余的意思一样。
- 实例化List<>
- childrenTree.Childrens = new List<Tree2ChildrenView>();
难道我每次都要写这句吗。我们可以放到构造函数中去:
- public class TreeView
- {
- public TreeView()
- {
- this.Childrens=new List<TreeChildrenView>();
- }
- [JsonProperty("id")]
- public int Id { get; set; }
- [JsonProperty("text")]
- public string Text { get; set; }
- [JsonProperty("children")]
- public IList<TreeChildrenView> Childrens{ get; set; }
- }
这样我们每次就直接使用就OK了。
- childrenTree.Childrens.Add(chchTree);
不需要再去实例化它,因为它自己调用的时候就自动实例化了。
利用JsonConvert.SerializeObject()实现类对象的json化的更多相关文章
- SpringBoot实体类对象和json格式的转化
1.引入maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson ...
- 将java中Map对象转为有相同属性的类对象(json作为中间转换)
java中Map对象转为有相同属性的类对象(json作为中间转换) 准备好json转换工具类 public class JsonUtil { private static ObjectMapper o ...
- @Html.Raw() 与Newtonsoft.Json.JsonConvert.SerializeObject()
一.后台 ViewBag.TypeList = typeList; 二.前台C# @{ var typeListFirst = ViewBag.TypeList;} 三.前台js中 var t ...
- 三:C#对象转换Json时的一些高级(特殊)设置;
导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型: 二:C#对象.集合.DataTable与Json内容互转示例: ...
- Json序列化与反序列化(对象与Json字符串的转换)--C#
public class JsonHelper { #region Json序列化与反序列化 /// <summary> /// 将json转化为对象 /// (需要提前构造好结构一致的M ...
- 后台对象转JSON字符串传到前台,前台JSON字符串转对象绑定标签赋值
/// <summary> /// 创建换货单-自动获取对应的数据(后端) /// </summary> [HttpGet] public ActionResult GetPr ...
- 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型
我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...
- OC 类对象和类加载
//------------------------Persion类----------------------------// 1 #import "Person.h" @imp ...
- C++ 类的动态组件化技术
序言: N年前,我们曾在软件开发上出现了这样的困惑,用VC开发COM组件过于复杂,用VB开发COM组件发现效率低,而且不能实现面向对象的很多特性,例如,继承,多态等.更况且如何快速封装利用历史遗留的大 ...
随机推荐
- CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)
前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...
- 挡不住的好奇心:ASP.NET 5是如何通过XRE实现跨平台的
.NET程序员也有自己的幸福,.NET的跨平台是一种幸福,.NET的开源也是一种幸福,而更幸福的是可以通过开源的.NET了解.NET是如何一步步走向跨平台的,所以幸福是一种过程. 在.NET跨平台的进 ...
- IDisposable的另类用法
IDisposable是.Net中一个很重要的接口,一般用来释放非托管资源,我们知道在使用了IDisposable的对象之后一定要调用IDisposable.Dispose()方法,或者使用.Net提 ...
- Windows建立Cucumber和Ruby测试环境
1. 下载安装Ruby1.9.3, 不要用RubyInstall 一键安装,下载zip然后解压到c:\Ruby193 (不要用2.0,用2.0安装不成功,不要怪我) 2. 环境变量配置RUBY_HOM ...
- A*寻路算法
对于初学者而言,A*寻路已经是个比较复杂的算法了,为了便于理解,本文降低了A*算法的难度,规定只能横竖(四方向)寻路,而无法直接走对角线,使得整个算法更好理解. 简而言之,A*寻路就是计算从起点经过该 ...
- 《R in Action》读书笔记(3) 数据变换
MindMapper 原文件
- 用JavaScript调用WCF Service
原创地址:http://www.cnblogs.com/jfzhu/p/4039604.html 转载请注明出处 前面介绍过<Step by Step 创建一个WCF Service>和& ...
- Chrome开发者工具不完全指南(四、性能进阶篇)
前言 Profiles面板功能的作用主要是监控网页中各种方法执行时间和内存的变化,简单来说它就是Timeline的数字化版本.它的功能选项卡不是很多(只有三个),操作起来比较前面的几块功能版本来说简单 ...
- 再谈使用Emit把Datatable转换为对象集合(List<T>)
一.前因和存在的问题 前面我写了一篇<使用Emit把Datatable转换为对象集合(List<T>)>的博文,其实起源于我自己编写的一个orm工具(见前面几篇博文有介绍),里 ...
- 2013 duilib入门简明教程 -- 完整的自绘标题栏(8)
看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题栏吧~ 看到下面这个效果图,小伙伴们是不是有点惊呆了呢~O(∩_∩)O~ dui ...