.NET中常用的几种解析JSON方法

一、基本概念

json是什么?

JSON:JavaScript 对象表示法(JavaScript Object Notation)。

JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法。类似 XML。

JSON 比 XML 更小、更快,更易解析。

序列化和反序列化是怎么回事?

序列化: 将数据结构或对象转换成二进制串的过程

反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程

如何:对 JSON 数据进行序列化和反序列化?

1、定义 Person 的数据协定

通过将 DataContractAttribute 附加到类并将 DataMemberAttribute 特性附加到要序列化的成员,为Person定义数据协定。

[DataContract]
    internal class Person
    {
        [DataMember]
        internal string name;

        [DataMember]
        internal int age;
    }

2、将 Person 类型的实例序列化为 JSON

3、从 JSON 反序列化 Person 类型的实例 

更多参考:

https://msdn.microsoft.com/zh-cn/library/bb412179.aspx

https://msdn.microsoft.com/zh-cn/library/bb412170.aspx

二、.NET中常用的几种解析JSON方法

.NET中常用的几种解析JSON方法比较 
名称 类库 使用场景 linq支持
System.Runtime.Serialization.Json DataContractJsonSerializer 全部 No
System.Web.Script.Serialization JavaScriptSerializer web No
System.Json JsonArray、JsonObject、JsonValue Silverlight Yes
Newtonsoft.Json JsonConvert、JArray、JObject、JValue 全部 Yes

1、DataContractJsonSerializer

.NET Framwork3.5自带的System.Runtime.Serialization.Json可很好的完成JSON的解析,不需要使用第三方库。

添加引用System.Runtime.Serialization,然后使用 using System.Runtime.Serialization.Json;

相应的序列化的类,注意下面类加的Attribute,比如:

    /// <summary>
    /// 异常对象
    /// </summary>
    [DataContract]
    internal class Ex
    {
        [DataMember]
        public string HelpLink { get; set; }
        [DataMember]
        public int HResult { get; set; }

        [DataMember]
        public string Message { get; set; }

        [DataMember]
        public string Source { get; set; }

        [DataMember]
        public string StackTrace { get; set; }

    }

json帮助类

/// <summary>
    /// json 帮助类
    /// </summary>
    internal class JsonHelper
    {
        //JSON字符串转对象
        public static T JsonToT<T>(string json)
        {
            var ser = new DataContractJsonSerializer(typeof(T));
            var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
            stream.Position = 0;
            return (T)ser.ReadObject(stream);
        }

        //对象转化为JSON字符串
        public static string TtoJson<T>(T obj)
        {
            var ser = new DataContractJsonSerializer(typeof(T));
            var stream = new MemoryStream();
            ser.WriteObject(stream, obj);
            var db = new byte[stream.Length];
            stream.Position = 0;
            stream.Read(db, 0, (int)stream.Length);
            var dataString = Encoding.UTF8.GetString(db);
            return dataString;
        }

    }

使用:

 var t = JsonHelper.jsonToT<T>(jsonstr);
 var jsonstr=JsonHelper.TtoJson<T>(T);

更多内容请参考:https://msdn.microsoft.com/zh-cn/library/bb907644.aspx

2、JavaScriptSerializer

using System.Web.Script.Serialization;

var jsSerializer   = new JavaScriptSerializer();
var json= jsSerializer.Serialize(T);
var T = jsSerializer.Deserialize<T>(json);

更多请参考:http://msdn.microsoft.com/zh-cn/library/bb359469.aspx

3、System.Json

// using System.Json

    var css = "{ \"#header\" : {background:\"red\"}, layout : [5,4,1],color:\"cyan\" }";

    var style = JsonObject.Parse(css) as JsonObject;    

    (
    from s in style
    where s.Key == "color"
    select (string)s.Value
    ).First().ToString();
    // "cyan"

    // 更多操作
    style["layout"][0] = 22;

    var hd = style["#header"];
    style["body>div+p"] = hd;
    style.Remove("#header");

    var bd = new JsonObject();
    bd["border"] = "1px solid cyan";
    style["body>div+p"]["#meta"] = bd;
    style.ToString();
    // {"layout":[22,4,1],"color":"cyan","body>div+p":{"background":"red","#meta":{"border":"1px solid cyan"}}}

更多请参考:http://msdn.microsoft.com/zh-cn/library/cc626400%28v=VS.95%29.aspx

4、JSON.NET

json帮助类

public class JsonHelper
    {
        /// <summary>
        /// 对象转换为JSON字符串
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public static string ObjectToJson(object item)
        {
            string res = JsonConvert.SerializeObject(item);
            return res;
        }
        /// <summary>
        /// JSON转换为对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jsonString"></param>
        /// <returns></returns>
        public static T JsonToObject<T>(string jsonString)
        {
            T res = JsonConvert.DeserializeObject<T>(jsonString);
            return res;
        }
    }

更多请参考:http://www.newtonsoft.com/json/help/html/Introduction.htm

三、加关注

如果本文对你有帮助,请点击右下角【好文要顶】和【关注我

时间: 2024-10-05 15:38:19

.NET中常用的几种解析JSON方法的相关文章

iOS中常用的四种数据持久化方法简介

iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding>@property (nonatomic, assign) NSInteger userID;@property (nonatomic,

本篇对IOS中常用的5种数据持久化方法进行简单对比总结

 第1种:UserDefaults(iPhone开发[二十]数据持久化总结之第1篇-NSUserDefaults) 1)易用性很强 2)数据存储在.plist文件中 3)一般保存首选项信息.缓存数据等,适用存储较少量数据的情况 4)缺点:无法将自定义对象序列化到属性列表中 第2种:属性列表(iPhone开发[二十一]数据持久化总结之第2篇-属性文件(.plist)) 1)易用性较强 2)数据存储在.plist文件中 3)一般用于存储少量数据,也不适合操作处理大量数据 4)缺点:无法将自定义对象序

Python编程中常用的12种基础知识总结

原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进制转换,Python调用系统命令或者脚本,Python 读写文件. 1.正则表达式替换目标: 将字符串line中的 overview.gif 替换成其他字符串 1 2 3 4 5 6 7 8 9 10 11 >>> lin

Python 编程中常用的 12 种基础知识总结

Python 编程中常用的 12 种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进制转换,Python调用系统命令或者脚本,Python 读写文件. 1.正则表达式替换 目标:将字符串line中的 overview.gif 替换成其他字符串 >>> line = '<IMG ALIGN="middle" SRC=\'#\'" /s

两种解析JSON的方法

对一段json字符串,解析有两种方法 第一种是普通的解析方法:如下 比较有代表性的解析json的方法,嘿嘿 还有一种是利用Gson解析,这种方法解析起来比较方便,不需要像那种普通的方法一样写那么多代码 注:在使用gson的时候类中的属性名称要和json中的属性名称一样 两种解析JSON的方法

Android中常用的三种存储方法浅析

Android中常用的三种存储方法浅析 Android中数据存储有5种方式: [1]使用SharedPreferences存储数据 [2]文件存储数据 [3]SQLite数据库存储数据 [4]使用ContentProvider存储数据 [5]网络存储数据 在这里我只总结了三种我用到过的或即将可能用到的三种存储方法. 一.使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置信息比如窗口状态,它的本质是基

【学习笔记】——原生js中常用的四种循环方式

一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出"欢迎下次光临" 在网页中弹出框输入1   网页输出"查询中--" 在网页中弹出框输入2   网页输出"取款中--" 在网页中弹出框输入3   网页输出"转账进行中--" 在网页中弹出框输入其他字符   网页输出"无效按键" 四种循环: for循环 while循环 for  in

VUE中常用的几种import(模块、文件)引入方式

VUE中常用的几种import(模块.文件)引入方式:https://blog.csdn.net/weixin_38930535/article/details/80177445 1.引入js文件 在用的那一页,引入文件 相应的js文件里面,必须是暴露出来的 2.引入组件 3.引入外部组件 4.引入外部js插件 原文地址:https://www.cnblogs.com/bydzhangxiaowei/p/12237156.html

产品经理常用的四种需求收集方法简述

A 客户访谈 客户访谈是通过面对面的交流方式了解具体客户对产品.对流程的需求.观点和看法. 客户访谈的内容可以包括: 1.了解哪些需求对客户比较重要. 2.就了解到的一些需求请客户协助进行优先排序. 3.就问题改进建议的初步想法与客户进行讨论,确认是否能够满足客户需求. 客户访谈的优点包括: 1.由于是面对面的交流,因此在调查内容上更加灵活,可以随时根据问答状况就一些内容进行深入讨论,获得更多的客户感受. 2.客户可以再调查人的协助下,进行一些较为复杂的问卷调查. 3.客户访谈方式的适用面广,可