zoukankan      html  css  js  c++  java
  • C# 对象与JSON字符串互相转换的三种方式

    C# 对象与JSON字符串互相转换的三种方式
    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。

      关于内存对象和JSON字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下三种方法来解决此问题

    分别是使用 Newtonsoft.Json.dll、DataContractJsonSerializer、 JavaScriptSerializer。 

    方法一: Newtonsoft.Json.dll 
    Newtonsoft.Json.dll在.net2.0之后的版本可以支持 我的版本.net framework4.0

    添加Newtonsoft.json的引用


    对象与json字符串转换类设计
    class JsonNewtonsoft
    {
    /// <summary>
    /// 把对象转换为JSON字符串
    /// </summary>
    /// <param name="o">对象</param>
    /// <returns>JSON字符串</returns>
    public static string ToJSON(this object o)
    {
    if (o == null)
    {
    return null;
    }
    return JsonConvert.SerializeObject(o);
    }
    /// <summary>
    /// 把Json文本转为实体
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="input"></param>
    /// <returns></returns>
    public static T FromJSON<T>(this string input)
    {
    try
    {
    return JsonConvert.DeserializeObject<T>(input);
    }
    catch (Exception ex)
    {
    return default(T);
    }
    }
    }
    方法二: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

    类设计
    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);
    }

    }
    程序测试:
    新建一个测试对象类Student.cs
    public enum Sex
    {
    男=0,
    女=1
    }
    [Serializable()]
    class Student
    {
    private string _name;

    public string Name
    {
    get { return _name; }
    set { _name = value; }
    }

    private int _age;

    public int Age
    {
    get { return _age; }
    set { _age = value; }
    }

    private Sex _sex = Sex.男;

    public Sex Sex
    {
    get { return _sex; }
    set { _sex = value; }
    }
    public Student()
    { }
    public Student(string name,int age,Sex sex)
    {
    this._name = name;
    this._age = age;
    this._sex = sex;
    }
    }
    测试程序
    static void Main(string[] args)
    {
    Student st = new Student("笨男孩",22,Sex.男);

    Console.WriteLine("============方法一============================================");
    //方法一

    Console.WriteLine("方法一对象转Json字符串");
    string jsonStr = JsonNewtonsoft.ToJSON(st);
    Console.WriteLine(jsonStr);
    Console.WriteLine("方法一Json字符串转对象");
    Student stobj = (Student)JsonNewtonsoft.FromJSON<Student>(jsonStr);
    Console.WriteLine("姓名:{0} 年龄:{1} 性别:{2}",stobj.Name,stobj.Age,stobj.Sex);


    Console.WriteLine("============方法二============================================");
    //方法二
    Console.WriteLine("方法二对象转Json字符串");
    string jsonStr2 = JsonDataContractJsonSerializer.ToJSON(st);
    Console.WriteLine(jsonStr2);
    Console.WriteLine("方法二Json字符串转对象");
    Student stobj2 = (Student)JsonDataContractJsonSerializer.FromJSON(jsonStr2, st);
    Console.WriteLine("姓名:{0} 年龄:{1} 性别:{2}", stobj2.Name, stobj2.Age, stobj2.Sex);


    Console.WriteLine("============方法三============================================");
    //方法二
    Console.WriteLine("方法三对象转Json字符串");
    string jsonStr3 = JsonJavaScriptSerializer.ToJSON(st);
    Console.WriteLine(jsonStr3);
    Console.WriteLine("方法三Json字符串转对象");
    Student stobj3 = (Student)JsonJavaScriptSerializer.FromJSON<Student>(jsonStr3);
    Console.WriteLine("姓名:{0} 年龄:{1} 性别:{2}", stobj3.Name, stobj3.Age, stobj3.Sex);

    Console.ReadKey();
    }
    程序运行结果:
    ————————————————
    版权声明:本文为CSDN博主「JiYF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/CoderJYF/article/details/79812509

  • 相关阅读:
    SWTDesigner注册器
    C# 创建、部署和调用WebService的简单示例
    (android实战)应用在线版本更新
    jQuery获取Select选择的Text和 Value(转)
    Android 判断sd卡和sim卡是否可用
    Android开发中如何固定屏幕显示!
    入侵网站简单方法总结
    【Android】防止UI界面被输入法遮挡(画面随输入法自适应)
    关于字符编码的问题
    最好用的mysql密码忘记的解决方法
  • 原文地址:https://www.cnblogs.com/liangyuwen/p/13207062.html
Copyright © 2011-2022 走看看