方法一.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. 一:Web

    一:Web介绍 1.Web:网页,网络 2.Web应用:运行在网络上的应用程序 3.网络应用程序分类:C/S B/S C/S 客服端(client)/服务器(server) 典型应用:QQ,YY B/ ...

  2. 前端(十):使用redux管理数据

    react本身能够完成动态数据的监听和更新,如果不是必要可以不适用redux. 安装redux: cnpm install redux --save,或者yarn add redux. 一.react ...

  3. 为什么不要 "lock(this)" ? lock object 并是readonly(转载)

    一. 为什么要lock,lock了什么?   当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待.但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是 ...

  4. 使用 Vuejs 开发 chrome 插件的注意事项

    使用 Vuejs 开发 chrome 插件 chrome 插件的开发其实并不难,web开发者可以使用 html, css, javascript 轻松的开发实用的 chrome 插件. 一个好的 ch ...

  5. h5新属性

    <!DOCTYPE html> <html lang="en"> <head> <meta id="viewport" ...

  6. 大数据平台的技术演化之路 诸葛io平台设计实例

    如今,数据分析能力正逐渐成为企业发展的标配,企业通过数据分析的过程将数据中的信息提取出来,进行处理.识别.加工.呈现,最后成为指导企业业务发展的知识和智慧.而处理.识别.加工.呈现的过程从本质上来讲, ...

  7. 跨域调用报表展现页面的flash打印方法

     环境说明: 项目的应用和润乾的报表应用分别部署在同一机器不同的web服务器上(IP相同,端口不同,项目的端口8080,报表应用的端口是6868). 在项目中的父页面通过iframe调用报表展现页 ...

  8. Centos7安装最新版本的docker

    centos7 安装docker-ce ,最新版本docker,docker阿里云加速docker-ce是指docker的社区版 卸载老版本的 docker 及其相关依赖sudo yum remove ...

  9. null的专栏:https://blog.csdn.net/google19890102

    null的专栏:https://blog.csdn.net/google19890102 csdn博客专栏:https://blog.csdn.net/column.html

  10. BackgroundWorker原理剖析

    BackgroundWorker类位于System.ComponentModel命名空间下,主要用来异步执行一个长时间的操作,然后,在完成事件中安全更新UI的控件属性.UI中的控件是不允许非创建该控件 ...