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 时均不会出异常

  • 相关阅读:
    最大子数组问题(分治策略实现)
    Solving the Detached Many-to-Many Problem with the Entity Framework
    Working With Entity Framework Detached Objects
    Attaching detached POCO to EF DbContext
    如何获取qq空间最近访问人列表
    Health Monitoring in ASP.NET 2.0
    problem with displaying the markers on Google maps
    WebMatrix Database.Open… Close() and Dispose()
    Accessing and Updating Data in ASP.NET: Retrieving XML Data with XmlDataSource Control
    Create web setup project that has crystal reports and sql script run manually on client system
  • 原文地址:https://www.cnblogs.com/ajilisiwei/p/6108071.html
Copyright © 2011-2022 走看看