方法一.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 与对象相互转换的更多相关文章

  1. JavaScript基础知识(JSON、Function对象、原型、引用类型)

    19.JSON 概念:JavaScript 对象表示法(JavaScript Object Notation),是一种轻量级的数据交换格式  特点:易于程序员编写和查看:易于计算机解析和生成 数据结构 ...

  2. json和java对象相互转换

    json和java对象相互转换 springboot中json转换默认使用的是jackson包,通过spring-boot-starter-web依赖的 1 在属性上添加注解@JsonFormat(p ...

  3. Java基础97 json插件的使用(java对象和json字符串对象之间的转换)

    1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...

  4. android开发中json与java对象相互转换

    json与java对象的相互转换.(使用com.google.gson) 在Android开发过程中,客户端总是需要从服务器获取数据,包括XML和json格式,目前json格式的数据使用较为普遍,所以 ...

  5. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

  6. 基础拾遗------redis详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  7. 基础拾遗------webservice详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  8. JSON 与 对象 、集合 之间的转换

    JSON字符串和java对象的互转[json-lib]   在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很 ...

  9. 基础拾遗-----mongoDB操作

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

随机推荐

  1. jeecg框架解决跨域问题

    controller层方法体中添加如下代码 response.setHeader("Access-Control-Allow-Origin", "*");res ...

  2. 用pymysql操作数据库

    import pymysql # 打开数据库连接 connection = pymysql.connect(host='127.0.0.1', user='root', passwd=', db='s ...

  3. 【PyQt5 学习记录】006:重写窗口事件及QMessageBox

    #!/usr/bin/env python import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QMessageBox ...

  4. jQuery基础(动画篇 animate,显示隐藏,淡入淡出,下拉切换)

    1.jQuery中隐藏元素的hide方法   让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局,如果在代码执行的时候,一般是通过js控制元 ...

  5. js下载文件

    本文的前提是:后台给的是一个可以下载的url的情况下的下载: 怎样的文件url才能触发浏览器的下载行为?(转自SF) 能触发浏览器下载的url有两类: response header中指定了Conte ...

  6. 关于HSTS的总结

    访问http网站,和服务器交互的步骤浏览器向服务器发起一次HTTP请求服务器返回一个重定向地址浏览器在发送一次HTTPS请求,得到最终内容 上面浏览器发送http请求后容易被拦截,使用HSTS后可以避 ...

  7. vmware下载存储vmdk文件后缀变-flat处理方式

    将vmware存储中的虚拟机vmdk文件下载到本地,下载完成后,下载了2个vmdk文件 一份为:xx.vmdk (通常1KB左右)  一份为:xx-flat.vmdk (此为源文件正常大小)     ...

  8. url override implements session

    url 重写实现会话概述 URL重写是对GET请求参数的应用,当服务器响应浏览器上一次请求时,将某些相关信息以超链接方式响应给浏览器,超链接中包括请求参数信息. 特点:URL必须以GET方式发送请求. ...

  9. node和iisnode express手工安装

    一.安装node.js的x86版本: 这样,node.js会安装在C:\Program Files (x86)\nodejs,这符合iisnode express7版本的期待. 二.安装iisnode ...

  10. vmware虚拟机挂载Windows磁盘的两种方法

    第一种 vmware虚拟机通过ntfs-3g挂接windows盘 1.共享windows盘虚拟机设置——>添加硬盘——>选择IDE——>使用物理磁盘——>选择本地盘(单分区)— ...