最近换工作了 从客户端转到Web端 第一个任务就是去别人的页面上抓取数据 用到的是JSON 因为他们网站json的格式有点怪 所以 就在JSON反序列化上面 花了一点时间

首先用到的工具是http://www.newtonsoft.com/json(记得引入 using Newtonsoft.Json)

然后 根据JSON创建对应的对象类

最后反序列化打回前台就可以用啦

总结三步:引入-根据json结构创建对象类-反序列化成json

下面分三种JSON形式

Demo1:

JsonStr: "{\"Name\":\"Coffee swirl\",\"Content\":\"the json\"}"

这个是最常见的json格式

对象类:

public class demo1
{
  public string Name { get; set; }
  public string Content { get; set; }
}

输出:

string jsonStr= "{\"Name\":\"Coffee swirl\",\"Content\":\"the json\"}";

var demo = JsonConvert.DeserializeObject<demo1>(jsonStr);
label1.Text = demo.Name;

  

Demo2:

json: "{\"List\":[{\"Name\":\"aaa\"},{\"Name\":\"bbb\"},{\"Name\":\"ccc\"}]}"

注意list后面带的是[] ,这表示这是个带数组的json格式

对象类:

public class demo2
{
public List[] List { get; set; }
} public class List
{
public string Name { get; set; }
}

输出:

string json = "{\"List\":[{\"Name\":\"aaa\"},{\"Name\":\"bbb\"},{\"Name\":\"ccc\"}]}";

var demo = JsonConvert.DeserializeObject<demo2>(jsonStr);

string lab = "";
foreach (var d in demo.List)
{
lab += d.Name + " ";
}
label1.Text = lab;

  

Demo3:

还有一种数组类型:

Json: "[{\"Name\":\"aaa\"},{\"Name\":\"bbb\"},{\"Name\":\"ccc\"}]"

对象类:

public class demo3
{
public string Name { get; set; }
}

输出:

var demo = JsonConvert.DeserializeObject<demo3[]>(json);

            string lab = "";
foreach (var d in demo)
{
lab += d.Name + " ";
}
label1.Text = lab;

  

Demo4:

json:(这个是通过在线格式化工具格式化了一下 这样看起来更加清楚)

[
  {
    "department": {"leader": "x1","number": "10"},
    "worker": [
      {"id": "1","name": "aaa1","work": "aaa2"},
      {"id": "2","name": "bbb1","work": "bbb2"},
      {"id": "3","name": "ccc1","work": "ccc2"}
    ]
  },
  {
    "department": {"leader": "x2","number": "20"},
    "worker": [
      {"id": "4","name": "ddd1","work": "ddd2"},

      {"id": "5","name": "eee1","work": "eee2"},

      {"id": "6","name": "fff1","work": "fff2"}
    ]
  }
]

这是个多层嵌套并且带数组的json格式,也是我遇到的比较复杂的一种

对象类:

public class demo4
{
  public department department { get; set; }
  public worker[] worker { get; set; }
} public class department
{
  public string leader { get; set; }
  public string number { get; set; }
} public class worker
{
  public int id { get; set; }
  public string name { get; set; }
  public string work { get; set; }
}

  

输出:

string jsonStr = "[{\"department\": {\"leader\": \"x1\",\"number\": \"10\"},\"worker\": [{\"id\": \"1\",\"name\": \"aaa1\",\"work\": \"aaa2\"},{\"id\": \"2\",\"name\": \"bbb1\",\"work\": \"bbb2\"},{\"id\": \"3\",\"name\": \"ccc1\",\"work\": \"ccc2\"}]},{\"department\": {\"leader\": \"x1\",\"number\": \"10\"},\"worker\": [{\"id\":\"4\",\"name\": \"ddd1\",\"work\": \"ddd2\"},{\"id\": \"5\",\"name\": \"eee1\",\"work\": \"eee2\"},{\"id\": \"6\",\"name\": \"fff1\",\"work\": \"fff2\"}]}]";

var demo = JsonConvert.DeserializeObject<demo4[]>(jsonStr);

string lab = "";
foreach (var d in demo)
{
lab += "领导:" + d.department.leader + "组员:{";
foreach (var w in d.worker)
{
lab += " " + w.name;
}
lab += "}";
}
label1.Text = lab;

基本就是这样了 可能以后遇到其他类型的json 我还会补全 代码都全部验证无误

C# Json反序列化处理的更多相关文章

  1. Json反序列化

    迟来的Json反序列化   源码发布 搞了一个下午,终于搞定改了这个号称中国的github...以后源码直接在这里发布了(英文实在太烂了) https://code.csdn.net/jy023050 ...

  2. C#在Json反序列化中处理键的特殊字符

    假设有如下Json 数据: 1.{ 2."id" : 1, 3."@value" : "this a @", 4."$p" ...

  3. C# Json反序列化

    Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自行在nuget中导入 Jso ...

  4. .net Json 反序列化时,属性带点

    .net Json 反序列化时,属性带点 使用[JsonProperty("xxx.xxx")] static void Main(string[] args) { string ...

  5. Newtonsoft.Json反序列化(Deserialize)出错:Bad JSON escape sequence

    使用Newtonsoft.Json反序列化收到的字串为JObject或其它支持的数据模型,有时错误,提示如下: Bad JSON escape sequence: \c. Path , positio ...

  6. C# json反序列化 对象中嵌套数组 (转载) 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

    C# json反序列化 对象中嵌套数组 (转载)   看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的   Newtonso ...

  7. C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone

    C# Json反序列化   Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自 ...

  8. json-lib json反序列化——日期转换

    将json格式的字符串转为对象,其中key-value有将String的日期转为Date类型,怪现象就是,转出来的Date类型的值是当前的系统时间. 网上有许多答案,在反序列化之前需要注册Date解析 ...

  9. json反序列化与pickle的用法

    json反序列化与pickle 一.定义 序列化:将内存中的不可持久化和传输对象转换为可方便持久化和传输对象的过程. 反序列化:将可持久化和传输对象转换为不可持久化和传输对象的过程. 二. 应用场景 ...

随机推荐

  1. javascript和php中的正则

    正则: var subStr=str.replace(reg/str,'');   不改变原来的字符串返回替换后的字符窜; 如果不用正则,只能替换第一个匹配到的; var subStr=str.mat ...

  2. BABOK - 企业分析(Enterprise Analysis)

    BABOK - 企业分析(Enterprise Analysis)概要 发表于2013年10月9日由周金根 描述 企业分析描述我们如何捕捉.提炼并明晰业务需要,并定义一个可能实现这些业务需要的一个方案 ...

  3. MyEclipse10搭建Strust2开发环境

    一.创建一个JavaWeb项目 启动MyEclipse10    ,然后在MyEclipse中创建一个JavaWeb项目,点击[File]---->[New]---->[WebProjec ...

  4. Redis集群服务器-高可用调研随笔[转]

    今天改了一天的Bug,本想下午开始专研Redis命令集,结果也泡汤了.只能在下班的路上考虑下Redis集群服务器的高可用方案.随笔而已,尚未成型,仅作记录. 当然,我说的可能比较片面,欢迎拍砖.斧正. ...

  5. WCF - 消息

    SOAP SOAP是Simple Object Access Protocol(简单对象访问协议)的简称 而如今SOAP已经成为了符合W3C制定的SOAP规范的消息 允许您使用 XML 在通过低层 I ...

  6. /bin/bash^M: bad interpreter: 没有那个文件或目录--转载

    运行脚本时出现了这样一个错误,打开之后并没有找到所谓的^M,查了之后才知道原来是文件格式的问题,也就是linux和windows之间的不完全兼容...具体细节不管,如果验证: vim test.sh: ...

  7. Java基础知识强化之IO流笔记30:字节流4种方式复制mp4并测试效率

    1. 需求:把e:\\哥有老婆.mp4 复制到当前项目目录下的copy.mp4中 字节流四种方式复制文件: • 基本字节流一次读写一个字节 • 基本字节流一次读写一个字节数组 • 高效字节流一次读写一 ...

  8. iOS 网络编程:socket

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  9. media queries 媒体查询使用

    media queries 翻译过来就是媒体查询,media 指的媒体类型.那么有哪些类型呢,常用的有 screen(屏幕).打印(print),个人理解就是它所在的不同终端. 常用的用法:1,< ...

  10. CI框架篇之模型篇--初识(1)

    模型 模型是专门用来和数据库打交道的PHP类.例如,假设你想用CodeIgniter来做一个Blog. 你可以写一个模型类,里面包含插入.更新.删除Blog数据的方法. 下面的例子将向你展示一个普通的 ...