方法一.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. 【转】Java 异步处理简单实践

    同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异步则意味着某个处理过程可以允许多个线程同时处理. 异步通常代表着更好的性能,因为它很大程度上依赖于缓冲,是典型的使用空间 ...

  2. 【原】Shiro框架基础搭建[2]

    简介: 关于搭建一个最基础的shiro网上的例子有很多,这里是记录一下自己尝试去看官方文档所搭建的一个小demo,项目采用的是原始的java静态工程,导入相关jar包后就能运行. 首先进入官网http ...

  3. jquery 对象的 height、innerHeight、outerHeight 的区别以及DOM 元素的 clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop

    前言:jquery 对象的 height.innerHeight.outerHeight,还有 DOM 元素的 clientHeight.offsetHeight.scrollHeight.offse ...

  4. 备忘:CSS术语词汇表——张鑫旭

    一.叨点什么 写文章的时候经常用到一些CSS方面的专业词汇.但是毕竟芳华年少不在,脑袋有点秀逗了,很多名词都记不住,这种感觉比厕所便秘还难受.比如今天居然记不起来公司公认脸蛋最pp的同事的名字,没想到 ...

  5. [h5+api]移动app开发用到的微信好友,朋友圈,qq好友,新浪微博分享合集

    适用H5+环境,能够使用plus方法的移动app中 /** * Created by HBuilder. * User: tyx * Date: 2018-11-21 * Time: 17:28:51 ...

  6. Maven项目下启动后Eclipse报错:org.springframework.web.context.ContextLoaderListener

    严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis ...

  7. PHP中文件操作(1)--打开/读取文件

    1.打开文件(fopen) 语法:resource  $fp=fopen(文件地址,模式),返回的是文件指针(file pointer) 模式 含义 r 只读 w 写(清空重写) a 追加 $fp = ...

  8. centos 删除文件和目录

    每次都记不住,发个文章记录一下.直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字-r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 删除文件夹 ...

  9. react组件更新swiper

    如果swiper渲染出来的数据不是写死的,那么就会涉及到swiper的更新, 那么我们在new 出 swiper 实例的时候,就需要把这个实例添加到组件里面去,在更新的或卸载的时候就可以直接使用 sw ...

  10. 使用IntelliJ IDEA配置Erlang开发环境

    这篇文章比较详细,感谢作者,拷贝过来做个记录 ————————————————————————————————————————————————————————————————————————————— ...