现阶段的项目是采用前后端分离的思想,前端使用的是Angular.JS,后端使用ABP框架,在后端我们通过WebAPI技术来向前端提供json数据。以前是通过MVC来写前端的代码,感觉后端有点在控制前端的节奏,一些少量的后端代码还是需要在HTML页面中写的,这次采用的这种模式,前端不需要写一点后端的C#代码,只负责写自己页面,至于说后端,只需要提供统一的json格式数据就可以,不需要管我前端如何展示。就是这样的情况,下面我们来看下如何将后端的数据json化。

后端数据转换为json

假设前端需要如下的数据格式:那么我们后端提供的josn格式就应该是这样的,这就利用到数据格式的转换了。

那么我们定义相关的类,看如何实现这样的格式。

  1. /// <summary>
  2. /// 第一大类
  3. /// </summary>
  4. public class TreeView
  5. {
  6. [JsonProperty("id")]
  7. public int Id { get; set; }
  8. [JsonProperty("text")]
  9. public string Text { get; set; }
  10. [JsonProperty("children")]
  11. public IList<TreeChildrenView> Childrens{ get; set; }
  12. }
  13. /// <summary>
  14. /// 第一大类中包含的第二大类
  15. /// </summary>
  16. public class TreeChildrenView
  17. {
  18. [JsonProperty("id")]
  19. public int Id { get; set; }
  20. [JsonProperty("text")]
  21. public string Text { get; set; }
  22. [JsonProperty("children")]
  23. public IList<Tree2ChildrenView> Childrens { get; set; }
  24. }
  25. /// <summary>
  26. /// 第二大类包含的第三大类
  27. /// </summary>
  28. public class Tree2ChildrenView
  29. {
  30. [JsonProperty("id")]
  31. public int Id { get; set; }
  32. [JsonProperty("text")]
  33. public string Text { get; set; }
  34. }

我们后端需要进行josn化,就需要引用Newtonsoft.Json此类库。

  1. JsonConvert.SerializeObject();

下面看我们的代码。

  1. static void Main(string[] args)
  2. {
  3. var treeView = new TreeView()
  4. {
  5. Id=1,
  6. Text = "陕西",
  7. };
  8. var childrenTree = new TreeChildrenView()
  9. {
  10. Id=2,
  11. Text = "宝鸡市"
  12. };
  13. var chchTree = new Tree2ChildrenView()
  14. {
  15. Id=3,
  16. Text = "眉县"
  17. };
  18. childrenTree.Childrens = new List<Tree2ChildrenView>();
  19. childrenTree.Childrens.Add(chchTree);
  20. treeView.Childrens=new List<TreeChildrenView>();
  21. treeView.Childrens.Add(childrenTree);
  22. string json = JsonConvert.SerializeObject(treeView);
  23. Console.WriteLine(json);
  24. Console.ReadLine();
  25. }

我们可以看到只使用了一句转换代码。我们就可以得到具体的json数据。

解释

  • 属性上面的标签 :[JsonProperty("id")]

意思是在json过程中将大写的Id转换为小写的。其余的意思一样。

  • 实例化List<>
  1. childrenTree.Childrens = new List<Tree2ChildrenView>();

难道我每次都要写这句吗。我们可以放到构造函数中去:

  1. public class TreeView
  2. {
  3. public TreeView()
  4. {
  5. this.Childrens=new List<TreeChildrenView>();
  6. }
  7. [JsonProperty("id")]
  8. public int Id { get; set; }
  9. [JsonProperty("text")]
  10. public string Text { get; set; }
  11. [JsonProperty("children")]
  12. public IList<TreeChildrenView> Childrens{ get; set; }
  13. }

这样我们每次就直接使用就OK了。

  1. childrenTree.Childrens.Add(chchTree);

不需要再去实例化它,因为它自己调用的时候就自动实例化了。

利用JsonConvert.SerializeObject()实现类对象的json化的更多相关文章

  1. SpringBoot实体类对象和json格式的转化

    1.引入maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson ...

  2. 将java中Map对象转为有相同属性的类对象(json作为中间转换)

    java中Map对象转为有相同属性的类对象(json作为中间转换) 准备好json转换工具类 public class JsonUtil { private static ObjectMapper o ...

  3. @Html.Raw() 与Newtonsoft.Json.JsonConvert.SerializeObject()

    一.后台 ViewBag.TypeList = typeList; 二.前台C# @{     var typeListFirst = ViewBag.TypeList;} 三.前台js中 var t ...

  4. 三:C#对象转换Json时的一些高级(特殊)设置;

    导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型:    二:C#对象.集合.DataTable与Json内容互转示例: ...

  5. Json序列化与反序列化(对象与Json字符串的转换)--C#

    public class JsonHelper { #region Json序列化与反序列化 /// <summary> /// 将json转化为对象 /// (需要提前构造好结构一致的M ...

  6. 后台对象转JSON字符串传到前台,前台JSON字符串转对象绑定标签赋值

    /// <summary> /// 创建换货单-自动获取对应的数据(后端) /// </summary> [HttpGet] public ActionResult GetPr ...

  7. 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

    我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...

  8. OC 类对象和类加载

    //------------------------Persion类----------------------------// 1 #import "Person.h" @imp ...

  9. C++ 类的动态组件化技术

    序言: N年前,我们曾在软件开发上出现了这样的困惑,用VC开发COM组件过于复杂,用VB开发COM组件发现效率低,而且不能实现面向对象的很多特性,例如,继承,多态等.更况且如何快速封装利用历史遗留的大 ...

随机推荐

  1. CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)

    前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...

  2. 挡不住的好奇心:ASP.NET 5是如何通过XRE实现跨平台的

    .NET程序员也有自己的幸福,.NET的跨平台是一种幸福,.NET的开源也是一种幸福,而更幸福的是可以通过开源的.NET了解.NET是如何一步步走向跨平台的,所以幸福是一种过程. 在.NET跨平台的进 ...

  3. IDisposable的另类用法

    IDisposable是.Net中一个很重要的接口,一般用来释放非托管资源,我们知道在使用了IDisposable的对象之后一定要调用IDisposable.Dispose()方法,或者使用.Net提 ...

  4. Windows建立Cucumber和Ruby测试环境

    1. 下载安装Ruby1.9.3, 不要用RubyInstall 一键安装,下载zip然后解压到c:\Ruby193 (不要用2.0,用2.0安装不成功,不要怪我) 2. 环境变量配置RUBY_HOM ...

  5. A*寻路算法

    对于初学者而言,A*寻路已经是个比较复杂的算法了,为了便于理解,本文降低了A*算法的难度,规定只能横竖(四方向)寻路,而无法直接走对角线,使得整个算法更好理解. 简而言之,A*寻路就是计算从起点经过该 ...

  6. 《R in Action》读书笔记(3) 数据变换

    MindMapper 原文件

  7. 用JavaScript调用WCF Service

    原创地址:http://www.cnblogs.com/jfzhu/p/4039604.html 转载请注明出处 前面介绍过<Step by Step 创建一个WCF Service>和& ...

  8. Chrome开发者工具不完全指南(四、性能进阶篇)

    前言 Profiles面板功能的作用主要是监控网页中各种方法执行时间和内存的变化,简单来说它就是Timeline的数字化版本.它的功能选项卡不是很多(只有三个),操作起来比较前面的几块功能版本来说简单 ...

  9. 再谈使用Emit把Datatable转换为对象集合(List<T>)

    一.前因和存在的问题 前面我写了一篇<使用Emit把Datatable转换为对象集合(List<T>)>的博文,其实起源于我自己编写的一个orm工具(见前面几篇博文有介绍),里 ...

  10. 2013 duilib入门简明教程 -- 完整的自绘标题栏(8)

        看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题栏吧~     看到下面这个效果图,小伙伴们是不是有点惊呆了呢~O(∩_∩)O~       dui ...