方法一.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. 比较ArrayList和LinkedList的异同

    1.ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构: 2.对于随机访问get和set,ArrayList要优于LinkedList; 3.对于添加和删除操 ...

  2. DHU 1788 Chinese remainder theorem again 中国剩余定理

    Chinese remainder theorem again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  3. ManualResetEvent

    ManualResetEvent是C#中一个比较常用的工具,可用于线程间通信,实现一种类似信号量的功能(不知道我这样描述是否恰当,有可能不是“类似”,而“就是”通过信号量来实现的,因为我也是最近才知道 ...

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

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

  5. display none隐藏后如果表单有数值,那么他的数值还存在!

    以前以为display:none后他的值就不存在了, display:none隐藏后如果表单有数值,那么他的数值还存在.(项目出了问题!!) <!DOCTYPE html PUBLIC &quo ...

  6. XHTML和HTML有什么区别

    HTML与XHTML之间的差别,主要分为功能上的差别和书写习惯的差别两方面. 关于功能上的差别,主要是XHTML可兼容各大浏览器.手机以及PDA,并且浏览器也能快速正确地编译网页. 由于XHTML的语 ...

  7. elixir mac环境

    1.升级brew brew update 2.安装 erlang brew install erlang 3.安装Elixir: brew install elixir 终端 iex iex> ...

  8. Android Studio插件之MVPHelper,一键生成MVP代码

    MVP盛行,听到的最多的抱怨就是咋要写这么多接口,那么本文作者提供了一个插件,自动生成这些接口的声明.感兴趣的还可以学习该插件的写法,按照自己平时的需求修改,提供开发效率. MVPHelper 一款I ...

  9. maven jstl、jsp、servlet依赖

    jstl.jsp.servlet依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId> ...

  10. lua5.3+luasocket

    今天安装了luasocket,遇到了很多错误,百度并没有什么针对lua5.3的版本安装luasocket的文章,在这里记录一下. 1.下载lua5.3 下载到了lua-5.3.5.tar.gz版本的l ...