方法一.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. VMWare开启DHCP和NAT服务(VMWare无法通过NAT上网以及和host主机通信的问题解决)

    最近在学习Hadoop,开始做一个集群.由于各个节点的IP地址需要保持不变,我决定在VMWare采用NAT的模式联网. 但是在安装Ubuntu系统的时候,提示我DHCP服务未开启. Your netw ...

  2. xcode 调试器 LLDB

    本文完全转载,转载地址:点击这里 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函 ...

  3. Java一个汉字占几个字节(详解与原理)(转载)

    1.先说重点: 不同的编码格式占字节数是不同的,UTF-8编码下一个中文所占字节也是不确定的,可能是2个.3个.4个字节: 2.以下是源码: 1 @Test 2 public void test1() ...

  4. Job控制台(elastic job lite console)

    elastic job lite console: 设计理念 1.本控制台和Elastic Job并无直接关系,是通过读取Elastic Job的注册中心数据展现作业状态,或更新注册中心数据修改全局配 ...

  5. .NET异常处理的动作策略(Action Policy)

    SQL Server 2008基于策略的管理,基于策略的管理(Policy Based Management),使DBA们可以制定管理策略,并将这些策略应用到服务器.数据库以及数据环境中的其他对象上去 ...

  6. WPF 手机验证码 发送按钮倒计时 代码

    private async void SendButton_Click(object sender, RoutedEventArgs e) { var button = sender as Butto ...

  7. 激活函数(relu,prelu,elu,+BN)对比on cifar10

    激活函数(relu,prelu,elu,+BN)对比on cifar10   可参考上一篇: 激活函数 ReLU.LReLU.PReLU.CReLU.ELU.SELU  的定义和区别   一.理论基础 ...

  8. 润乾配置连接kingbase(金仓)数据库

     问题背景 客户根据项目的不同,使用润乾连接的数据库类型各种各样,此文针对前几日使用润乾设计器连接kingbase金仓数据库做一个说明. kingbase金仓数据库是一款国产数据库,操作方式和配置 ...

  9. Object equals 方法

    package com.mydemo.controller; public class TestEquals { public static void main(String[] args) { Do ...

  10. Pig模式

    Pig中的模式可以是用户显示声明的,也可以是Pig通过用户的使用方式猜测的. Pig对模式的认知在Pig Latin脚本执行的不同阶段可能是不同的.     下面的语句,用户显示声明了模式:3个字段, ...