• 基础拾遗 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 时均不会出异常

  • 相关阅读:
    为什么JSP的内置对象不需要声明
    什么不能输?
    可采用两种方法得到一个EJB对象
    EJB
    J2EE之JPA
    Application、Activity Stack 和 Task的区别
    关于 android屏幕适配
    JSP 向 JavaScript 中传递数组
    Android 图片异步加载 加载网络图片
    Android 显示意图和隐式意图的区别
  • 原文地址:https://www.cnblogs.com/ajilisiwei/p/6108071.html
Copyright © 2020-2023  润新知