Json的简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

                                                                    来自百度百科的介绍

Json的优点

  • 数据格式比较简单,易于读写,格式都是压缩的,占用带宽小
  • 易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
  • 支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;
  • 在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
  • 因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。

传统操作Json

很多.NET开发程序员或多或少都会遇到操作Json字符串的情况,一般来说,我们都是先定义一个和Json格式相匹配的类,然后将json字符串反序列化成对象,这样便于我们编程使用,由于.NET是强类型语言,Json又是多变的,非常灵活的,导致服务器端定义的json序列化类越来越多,操作也及其不便。特别是对多层嵌套的json更是头疼。此次不再过多声明,.NET程序员用过都明白。

简易操作Json

DynamicJson是专门为.NET程序员开发的Json操作库,其源码非常简单,仅仅只有400行代码,一个对应的class类,目前只支持.NET 4.0以上的.NET Framework。

如何在项目中使用DynamicJson

  • 直接通过Nuget安装
PM > Install-Package DynamicJson
  • 下载DynamicJson.dll,然后在项目中添加引用,下载地址如下:
http://dynamicjson.codeplex.com/

读取、获取

// 将Json字符串解析成DynamicJson对象
var json = DynamicJson.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }"); var r1 = json.foo; // "json" - string类型
var r2 = json.bar; // 100 - double类型
var r3 = json.nest.foobar; // true - bool类型
var r4 = json["nest"]["foobar"]; // 还可以和javascript一样通过索引器获取

  

判断,新增,更新,删除,替换,还可以输出新的Json字符串

// 将Json字符串解析成DynamicJson对象
var json = DynamicJson.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }"); // 判断json字符串中是否包含指定键
var b1_1 = json.IsDefined("foo"); // true
var b2_1 = json.IsDefined("foooo"); // false
// 上面的判断还可以更简单,直接通过json.键()就可以判断
var b1_2 = json.foo(); // true
var b2_2 = json.foooo(); // false; // 新增操作
json.Arr = new string[] { "NOR", "XOR" }; // 新增一个js数组
json.Obj1 = new { }; // 新增一个js对象
json.Obj2 = new { foo = "abc", bar = 100 }; // 初始化一个匿名对象并添加到json字符串中 // 删除操作
json.Delete("foo");
json.Arr.Delete(0);
// 还可以更简单去删除,直接通过json(键); 即可删除。
json("bar");
json.Arr(1); // 替换操作
json.Obj1 = 5000; // 创建一个新的JsonObject
dynamic newjson = new DynamicJson();
newjson.str = "aaa";
newjson.obj = new { foo = "bar" }; // 直接序列化输出json字符串
var jsonstring = newjson.ToString(); // {"str":"aaa","obj":{"foo":"bar"}}

  

遍历

 // 直接遍历json数组
var arrayJson = DynamicJson.Parse(@"[1,10,200,300]");
foreach (int item in arrayJson)
{
Console.WriteLine(item); // 1, 10, 200, 300
} // 直接遍历json对象
var objectJson = DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}");
foreach (KeyValuePair<string, dynamic> item in objectJson)
{
Console.WriteLine(item.Key + ":" + item.Value); // foo:json, bar:100
}

  

转换和反序列化

public class FooBar
{
public string foo { get; set; }
public int bar { get; set; }
} var arrayJson = DynamicJson.Parse(@"[1,10,200,300]");
var objectJson = DynamicJson.Parse(@"{""foo"":""json"",""bar"":100}"); // 将json数组转成C#数组
// 方法一:
var array1 = arrayJson.Deserialize<int[]>();
// 方法二
var array2 = (int[])arrayJson;
// 方法三,这种最简单,直接声明接收即可,推荐使用
int[] array3 = arrayJson; // 将json字符串映射成C#对象
// 方法一:
var foobar1 = objectJson.Deserialize<FooBar>();
// 方法二: var foobar2 = (FooBar)objectJson;
// 方法三,这种最简单,直接声明接收即可,推荐使用
FooBar foobar3 = objectJson; // 还可以通过Linq进行操作
var objectJsonList = DynamicJson.Parse(@"[{""bar"":50},{""bar"":100}]");
var barSum = ((FooBar[])objectJsonList).Select(fb => fb.bar).Sum(); // 150
var dynamicWithLinq = ((dynamic[])objectJsonList).Select(d => d.bar);

  

序列化成json字符串

 // 声明一个匿名对象
var obj = new
{
Name = "Foo",
Age = 30,
Address = new
{
Country = "Japan",
City = "Tokyo"
},
Like = new[] { "Microsoft", "Xbox" }
};
// 序列化
// {"Name":"Foo","Age":30,"Address":{"Country":"Japan","City":"Tokyo"},"Like":["Microsoft","Xbox"]}
var jsonStringFromObj = DynamicJson.Serialize(obj); // 还支持直接序列化数组,集合
// [{"foo":"fooooo!","bar":1000},{"foo":"orz","bar":10}]
var foobar = new FooBar[] {
new FooBar { foo = "fooooo!", bar = 1000 },
new FooBar { foo = "orz", bar = 10 }
};
// 序列化
var jsonFoobar = DynamicJson.Serialize(foobar);

  

生成xml字符串

var obj = DynamicJson.Parse(@"{""tes"":10,""nest"":{""a"":0}");
var xmlStr=obj.xml;

  

其他(冲突问题,编译不通过问题)

var nestJson = DynamicJson.Parse(@"{""tes"":10,""nest"":{""a"":0}");

            nestJson.nest(); // 判断是否存在nest属性
nestJson.nest("a"); // 删除nest属性中的a属性 // 处理json中的键和C#的类型冲突导致编译失败,或语法提示错误,只需要在前面加@前缀即可
var json = DynamicJson.Parse(@"{""int"":10,""event"":null}");
var r1 = json.@int; // 10.0
var r2 = json.@event; // null

  

例子一:TwitterAPI

static void Main()
{
var publicTL = new WebClient().DownloadString(@"http://twitter.com/statuses/public_timeline.json");
var statuses = DynamicJson.Parse(publicTL);
foreach (var status in statuses)
{
Console.WriteLine(status.user.screen_name);
Console.WriteLine(status.text);
}
}

  

例子二:TwitterAPI2

static void Main(string[] args)
{
var wc = new WebClient();
var statuses = Enumerable.Range(1, 5)
.Select(i =>
wc.DownloadString("http://twitter.com/statuses/user_timeline/neuecc.json?page=" + i))
.SelectMany(s => (dynamic[])DynamicJson.Parse(s))
.OrderBy(j => j.id); foreach (var status in statuses)
{
Console.WriteLine(status.text);
}
}

  

看到这里,是不是觉得很爽,赶快让你的项目集成DynamicJson吧。

让C#可以像Javascript一样操作Json的更多相关文章

  1. 让C#可以像Javascript一样操作Json DynamicJson

    http://blog.csdn.net/lisenyang/article/details/52535314

  2. javascript学习之JSON

    JSON本来是javascript的一个自己,后来已经成为了一种独立的数据格式,在web应用中运用极其广泛. 与javascript对象不同的是,JSON中的属性名任何时候都必须加双引号. javaS ...

  3. 操作Json

    C#可以像Javascript一样操作Json 阅读目录 Json的简介 Json的优点 传统操作Json 简易操作Json Json的简介 JSON(JavaScript Object Notati ...

  4. JavaScript操作JSON的方法总结,JSON字符串转换为JSON对象

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  5. 在Javascript操作JSON对象,增加 删除 修改

    在Javascript操作JSON对象,增加删除修改全有的,详情见代码 <script type="text/javascript"> var jsonObj2 = { ...

  6. javascript操作json总结

    原文:http://www.cnblogs.com/worfdream/articles/1956449.html JSON(JavaScript Object Notation) 是一种轻量级的数据 ...

  7. 初学者必看:精心整理的Javascript操作JSON总结

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  8. JavaScript 操作JSON总结

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  9. JavaScript中使用JSON,即JS操作JSON总结

    JSON(JavaScript Object Notation 对象标记) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生 ...

随机推荐

  1. Javascript中数组方法和方法的扩展

    最近一直在努力的恶补javascript中的各种知识,比如说闭包,作用域,继承,构造函数,变量,内置对象等概念.同时,也在学习着ES6的新知识.最近想给大家分享的就是数组实例方法的练习以及如何去扩展一 ...

  2. 学习zepto.js(对象方法)[4]

    今天说说那一套获取元素集合的一些方法: ["children", "clone", "closest", "contents&qu ...

  3. SharePoint 2013 页面访问,Url中间多一段"_layouts/15/start.aspx#"

    问题描述: 我想访问如下页面 http://Host/_layouts/15/ManageFeatures.aspx 点击以后页面地址没有错,但是中间多了一段“_layouts/15/start.as ...

  4. 【iOS】屏幕适配之NSLayoutConstraint

    前言 如何实现一张图片在iPhone和iPad上显示不同的尺寸,我了解到一般有三种办法:直接手写代码动态添加约束:把NSLayoutConstraint关联到ViewController里再viewD ...

  5. [LoadRunner]LR11安装或破解时报错的解决方法

    背景:在性能测试项目上,需要安装到LR11进行性能测试,而在安装时会出现安装运行环境失败,安装文件缺失等问题.现总结了上述问题,并给出以下解决方法: 问题1:安装LoadRunner时出现“计算机缺少 ...

  6. Microsoft IoT Starter Kit 开发初体验

    1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请.申请地址为:http:// ...

  7. SqlServer--查询案例

    use  MyDataBase1 -- * 表示显示所有列 -- 查询语句没有加where条件表示查询所有行 select *from TblStudent ---只查询表中的部分列 select t ...

  8. SQL Server:触发器详解

    1. 概述 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活. 所以触发器可以用来实现对表实施复杂的完整性约束. 2. 触发器的分类 SQL S ...

  9. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  10. android break 与 return 的区别

    break 的含义是中断,return 的含义是结束整个方法的执行. 区别. public static void main(String agrs[]){ int i; for(i=0;i<1 ...