基础拾遗 C# Json 与对象相互转换
方法一.JavaScriptSerializer
方法二.JsonConvert
示例:
Web API项目
1.新建 Model:
namespace WebApi
{
public class Product
{
public string Name { set; get; }
public string Price { set; get; }
}
public class ShoppingCart
{
public string Name { set; get; }
public List<Product> ProductList { set; get; }
}
}
2.序列化与反序列化工具类
(1).新建使用JavaScriptSerializer方法的的工具类JsonHelper:
...
using System.Web.Script.Serialization;
namespace WebApi
{
public static class JsonHelper<T>
{
private static JavaScriptSerializer serializer = new JavaScriptSerializer();
public static string GetJsonStr(T objectList)
{
return serializer.Serialize(objectList);
}
public static List<T> GetObjectList<T>(string jsonStr)
{
List<T> objs = serializer.Deserialize<List<T>>(jsonStr);
return objs;
}
public static T GetObj(string jsonStr)
{
return serializer.Deserialize<T>(jsonStr);
}
}
}
(1).新建使用JsonConvert方法的的工具类NetJsonHelper:
...
using Newtonsoft.Json;
namespace WebApi.Common
{
public class NetJsonHelper<T>
{
public static string GetJsonStr(T obj)
{
return JsonConvert.SerializeObject(obj);
}
public static T GetObj(string objJsonStr)
{
return (T)JsonConvert.DeserializeObject<T>(objJsonStr);
}
public static List<T> GetObjs(string objsJsonStr)
{
return (List<T>)JsonConvert.DeserializeObject<List<T>>(objsJsonStr);
}
}
}
3.新建控制器 ShoppingController
public class ShoppingController : ApiController
{
private static ShoppingCart shoppingCart = new ShoppingCart();
private static string productsStr = string.Empty; //保存序列化字符串
public ShoppingController()
{
List<Product> products = new List<Product>() {
new Product(){Name="Apple",Price="$20/kg"},
new Product(){Name="Banana",Price="$15/kg"},
new Product(){Name="Melon",Price="$20/kg"}
};
shoppingCart.Name = "MyFruitBaskit";
shoppingCart.ProductList = products;
}
public string GetShoppingCart()
{
string JsonStr = JsonHelper<ShoppingCart>.GetJsonStr(shoppingCart);
productsStr=JsonStr; //将序列化后的字符串保存起来用于反序列化接口测试
return JsonStr;
}
public IEnumerable<Product> GetFruitList()
{
ShoppingCart shoppingCartObj = JsonHelper<ShoppingCart>.GetObj(productsStr);
return shoppingCartObj.ProductList;
}
public string GetShoppingCartByNetJson()
{
string JsonStr = NetJsonHelper<ShoppingCart>.GetJsonStr(shoppingCart);
productsStr = JsonStr; //将序列化后的字符串保存起来用于反序列化接口测试
return JsonStr;
}
public IEnumerable<Product> GetFruitListByNetJson()
{
ShoppingCart shoppingCartObj = NetJsonHelper<ShoppingCart>.GetObj(productsStr);
return shoppingCartObj.ProductList;
}
}
4.启动WEB API进行测试
如:测试JavaScriptSerializer
先: localhost:xxxx/api/Shopping/GetShoppingCart
然后: localhost:xxxx/api/Shopping/GetFruitList
两种方法不论在序列化还是反序列化时,当传入的是 null 时均不会出异常
基础拾遗 C# Json 与对象相互转换的更多相关文章
- JavaScript基础知识(JSON、Function对象、原型、引用类型)
19.JSON 概念:JavaScript 对象表示法(JavaScript Object Notation),是一种轻量级的数据交换格式 特点:易于程序员编写和查看:易于计算机解析和生成 数据结构 ...
- json和java对象相互转换
json和java对象相互转换 springboot中json转换默认使用的是jackson包,通过spring-boot-starter-web依赖的 1 在属性上添加注解@JsonFormat(p ...
- Java基础97 json插件的使用(java对象和json字符串对象之间的转换)
1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...
- android开发中json与java对象相互转换
json与java对象的相互转换.(使用com.google.gson) 在Android开发过程中,客户端总是需要从服务器获取数据,包括XML和json格式,目前json格式的数据使用较为普遍,所以 ...
- Java基础/利用fastjson反序列化json为对象和对象数组
利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...
- 基础拾遗------redis详解
基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...
- 基础拾遗------webservice详解
基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...
- JSON 与 对象 、集合 之间的转换
JSON字符串和java对象的互转[json-lib] 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很 ...
- 基础拾遗-----mongoDB操作
基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...
随机推荐
- 【转】使用Freemarker实现网页静态化
使用Freemarker实现网页静态化 2017年08月20日 20:45:51 阅读数:1981 1.1. 什么是freemarker FreeMarker是一个用Java语言编写的模板引擎,它基于 ...
- BAT技术需求,你能达到多少?
作为中国互联网界的传奇和标杆企业,BAT 三家公司的一举一动受互联网人的精密亲密关注.进入 BAT 成为大厂的一员成了许多互联网人职业生活生存追逐的方针之一. 本文的作者作为一个非科班毕业,出身于三流 ...
- xamarin.android 实现 Activity 底部弹出对话框菜单
Resources/drawable 下新增如下文件: push_bottom_in.xml <?xml version="1.0" encoding="utf-8 ...
- 阿里云服务器linux主机如何添加swap分区
为什么要添加Swap分区?swap分区,即交换区,作用为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作 ...
- 前端日报-20160527 underscore 源码解读
underscore 源码解读 API文档浏览器 JavaScript 中加号操作符细节 抛弃 jQuery,拥抱原生 JS 从 0 开始学习 GitHub 系列之「加入 GitHub」 js实现克隆 ...
- request获取当前用户
1.request.getRemoteUser();//获取当前缓存的用户,比如Spring Security做权限控制后就会将用户登录名缓存到这里 request.getRemoteAddr();/ ...
- gulp实用配置(1)——demo
在React和Vue推进下,现在很多人都在使用webpack作为自动化构建工具,但其实在很多时候我们并不是一定需要用到它,gulp这样的轻量级构建工具就足够了. 最近一段时间不是太忙,所以就写了三份配 ...
- Ubuntu VNC 打开spyder无法输入(检测不到键盘配置)解决方法
在ubuntu中安装好spyder后, 打开spyder发现无法输入. 在打开spyder的终端窗口,有如下提示: QXcbConnection: Failed to initialize XRand ...
- SLAM会被深度学习方法取代吗?
日益感觉到自己对深度学习的理解比较肤浅,这段且当做是以前的认识. 上上周去围观了泡泡机器人和AR酱联合举办的论坛.在圆桌阶段,章国峰老师提了一个问题:SLAM会被深度学习方法取代吗?这是一个很有趣的话 ...
- 【Android】RxJava的使用(四)线程控制 —— Scheduler
并没有关系的图 前言 经过前几篇的介绍,对RxJava对模式有了一定的理解:由Observable发起事件,经过中间的处理后由Observer消费.(对RxJava还不了解的可以出门左拐)之前的代码中 ...