基础拾遗 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详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...
随机推荐
- oracle数据库逐步学习总结【基础一】
原创作品,转载请在文章开头显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10059955.html 一.oracle的基本命令 1.连接命令 用法:c ...
- windows多线程窗口程序设计
掌握windows基于消息驱动的窗口应用程序设计的基本方法,掌握窗口程序资源的概念与设计,掌握常用的消息的程序处理方法,掌握文字图形输出相关函数编程.掌握设计的基本方法(选项),掌握时钟消息设计动画程 ...
- ef和mysql使用(二)--让mysql支持EntityFramework.Extended实现批量更新和删除
我们都知道Entity Framework 中不能同时更新多条记录,但是一个老外写的扩展库可以实现此功能EntityFramework.Extended,但是如何是mysql数据库要怎么实现呢 首先实 ...
- CSS 的介绍
第一章 的介绍 1.CSS:“层叠样式表”,它是cascading style sheets的缩写,作用就是给HTML标签加表现形式(样式-显示),如:字体,图片,列表,位置等. 在浏览器中可以看到部 ...
- 51Nod1053 最大M子段和V2 二分+DP
传送门 直接DP的话最多也只能做到\(O(nm)\),对于\(5\times 10^4\)的数据范围实在无能为力 夹克老爷提供的做法是贪心,思想大概是在调整的同时,合理构造每个选择对应的新状态,使得新 ...
- js和jquery中获取非行间样式
样式又分为了行间样式和非行间样式.一般来说行间样式用的是比较少的,因为它能够作用的范围就只有一个元素,而非行间样式的作用范围可以是一类元素(即拥有相同德标签,或者说是有相同的类名,(当然id名不可能相 ...
- JavaScript 常见面试题
此文内容多为 JavaScript 对数组理解及运用. 1.如何消除一个数组里面重复的元素? var arr = [1, 2, 3, 3, 4, 4, 5, 5, 6, 1]; var newArr ...
- Ubuntu下编译opencv 和Ubuntu使用ffmpeg实现音频、视频的抽取
一.使用Ubuntu编译opencv (前提是Ubuntu内已经正确配置了opencv,个人采用opencv3.2) g++ 1.cpp -o 1 `pkg-config --cflags --lib ...
- Flutter学习之制作底部菜单导航
简介 现在我们的 APP 上面都会在屏幕下方有一排的按钮,点击不同的按钮可以进入不同的界面.就是说在界面的底部会有一排的按钮导航.可看下面的图示. 完成图示 程序工程目录 梳理下实现步骤我们需要实现这 ...
- 润乾报表新功能–导出excel支持锁定表头
在以往的报表设计中,锁定表头是会经常被用到的一个功能,这个功能不仅能使浏览的页面更加直观,信息对应的更加准确,而且也提高了报表的美观程度.但是,很多客户在将这样的报表导出excel时发现exce ...