zoukankan      html  css  js  c++  java
  • 基础拾遗 C# Json 与对象相互转换

    方法一.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 时均不会出异常

  • 相关阅读:
    Django Rest Framework(版本、解析器、序列化、数据验证)
    Django Rest Framework(认证、权限、限制访问频率)
    Django rest_framework 认证源码流程
    RESTful API
    微信网页第三方登录原理
    web实现QQ第三方登录 开放平台-web实现QQ第三方登录
    H5版如何在微信外(非微信浏览器)进行微信支付技术方案
    支付宝手机网站接入2-支付结果异步通知
    支付宝手机网站接入1
    Npoi导入导出Excel操作
  • 原文地址:https://www.cnblogs.com/ajilisiwei/p/6108071.html
Copyright © 2011-2022 走看看