C#中的Json处理

  • Json包含Object和Array两种表示结构
  • 现有库
    • 下列各库均可封装成工具类,统一进行类型检查、空检查、异常处理、类型转换、泛型处理等逻辑。
    • 不论哪种方式,要序列化成json的对象定义中不能存在循环引用,比如子类中又包含父类
    • NewtonSoft
      • 最好用,最常用
      • 最好通过NuGet来管理引用
      • 序列化的模式:OptOut和OptIn
        • OptOut:默认值,类中所有公有成员会被序列化,如果不想被序列化,可以用特性JsonIgnore
          • 序列化/反序列化使用特性时忽略某个属性:[JsonIgnore]
        • OptIn:默认情况下,所有的成员不会被序列化,类中的成员只有标有特性JsonProperty的才会被序列化,当类的成员很多,但客户端仅仅需要一部分数据时,很有用
      • JsonConvert.SerializeObject
      • JsonConvert.DeserializeObject
    • DataContractJsonSerializer
      • 来自System.Runtime.Serialization.dll
class JsonDataContractJsonSerializer
    {
        /// <summary>
        /// 内存对象转换为json字符串
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string ObjectToJson(object obj)
        {
           DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
           MemoryStream stream = new MemoryStream();
           serializer.WriteObject(stream, obj);
           byte[] dataBytes = new byte[stream.Length];
           stream.Position = 0;
           stream.Read(dataBytes, 0, (int)stream.Length);
           return Encoding.UTF8.GetString(dataBytes);
        }
       /// <summary>
       /// Json字符串转内存对象
       /// </summary>
       /// <param name="jsonString"></param>
       /// <param name="obj"></param>
       /// <returns></returns>
        public static object JsonToObject(string jsonString, object obj)
        {
           DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
           MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
           return serializer.ReadObject(mStream);
        }
    }
* JavaScriptSerializer
    * 来自System.Web.Extensions.dll,因此最好用于Web项目,省得桌面应用也引用Web包(当然如果已经引用了,那就无所谓了)
public static class JsonJavaScriptSerializer
    {
        /// <summary>
        /// 内存对象转换为json字符串
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string ToJSON(object obj)
        {
            StringBuilder sb = new StringBuilder();
            JavaScriptSerializer json = new JavaScriptSerializer();
            json.Serialize(obj, sb);
            return sb.ToString();
        }
        /// <summary>
        /// Json字符串转内存对象
        /// </summary>
        /// <param name="jsonString"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static T FromJSON<T>(string jsonString)
        {
            JavaScriptSerializer json = new JavaScriptSerializer();
            return json.Deserialize<T>(jsonString);
        }

    }
原文地址:https://www.cnblogs.com/wyp1988/p/11388261.html