C#中Json反序列化的实现方法

前言

Json反序列化有两种方式【本人】,一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单。

使用了Newtonsoft.Json,可以自行在nuget中导入

Json源数据:

 var data = "{'jingdong_ldop_receive_trace_get_responce':{'code':'0','querytrace_result':{'data':[{'opeTitle':'快递签收','opeRemark':'货物已交付京东物流','opeTime':'2011/04/17 18:23:20','opeName':'京东快递','waybillCode':'bc00000001'},{'opeTitle':'站点验货','opeRemark':'货物已分配,等待配送','opeTime':'2011/04/23 08:29:56','opeName':'京东快递','waybillCode':'bc00000001'},{'opeTitle':'配送员收货','opeRemark':'配送员开始配送,请您准备收货,','opeTime':'2011/04/23 08:36:28','opeName':'京东快递','waybillCode':'bc00000001'},{'opeTitle':'妥投','opeRemark':'货物已完成配送,感谢您选择京东物流','opeTime':'2011/04/23 09:47:13','opeName':'京东快递','waybillCode':'bc00000001'}],'messsage':'成功','code':100}}}";

第一种:是用匿名方法生成,按照Json的格式,从外到内,一步一步写,非数组用new{},数组用new[]{},名字必须与json中名字一致

//使用匿名变量构造
   {
    var JsonDataForVar = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(data, new
    {
     jingdong_ldop_receive_trace_get_responce = new
     {
      code = string.Empty,
      querytrace_result = new
      {
       data = new[] {
       new {
         opeTitle=string.Empty,
         opeRemark=string.Empty,
         opeTime=string.Empty,
         waybillCode=string.Empty,
         opeName=string.Empty
       }
      }
      }
     }
    });

    foreach (var item in JsonDataForVar.jingdong_ldop_receive_trace_get_responce.querytrace_result.data)
    {
     var a = item.opeTitle;
     var b = item.opeRemark;
     var c = item.opeTime;
     var d = item.waybillCode;
     var f = item.opeName;

    }
   }

第二种:使用实体

//实体部分,建议从内到外写实体,名字必须与json中名字一致【简便方法,搜索Json转实体,将Json字符串导入,自动生成实体】

public class Item
  {
   public string opeTitle { get; set; }
   public string opeRemark { get; set; }
   public string opeTime{ get; set; }
   public string waybillCode { get; set; }
   public string opeName { get; set; }
  }

  public class JdResult
  {
   public string code { get; set; }
   public string msg { get; set; }
   public List<Item> data { get; set; }
  }

  public class JdResponce
  {
   public string code { get; set; }

   public JdResult querytrace_result { get; set; }
  }

  public class JdBody
  {
   public JdResponce jingdong_ldop_receive_trace_get_responce { get; set; }
  }

//方法

//使用实体构造
   {
    var JsonDataForClass = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(data, new JdBody());

    foreach (var item in JsonDataForClass.jingdong_ldop_receive_trace_get_responce.querytrace_result.data)
    {
     var a = item.opeTitle;
     var b = item.opeRemark;
     var c = item.opeTime;
     var d = item.waybillCode;
     var f = item.opeName;
    }
   }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    引言:最近在工作中遇到与某些API对接的post的数据需要将对象的字段首字母小写. 解决办法有两种: 第一种:使用对象的字段属性设置JsonProperty来实现(不推荐,因为需要手动的修改每个字段的属性) public class UserInfo { [JsonProperty("id")] public int Id{ set; get; } [JsonProperty("userName")] public string UserName{ set; get

  • C#中 Json 序列化去掉null值的方法

    要将一个对象序列化,可是如果对象的属性为null的时候,我们想将属性为null的都去掉. 在这里我使用Newtonsoft.Json.dll 记录一下序列化以及反序列化 json字符串转对象 Model model=JsonConvert.DeserializeObject<Model>(val); 将对象转化为json格式字符串 string jsonString = JsonConvert.SerializeObject(obj); 那么如何序列化为json时过滤掉NULL呢?? var

  • C#使用JavaScriptSerializer序列化时的时间类型处理

    最近在做一个数据交换服务接口,用的 .NET Web API 项目.需要监控每次请求的数据,也就是操作日志.请求数据为实体对象,所以我用了序列化将请求内容读取并写入日志.咋一看,好像并没有什么问题,但是时间却不是我们平常看到的格式.效果图是这样的: 猜测这里是由于 js 初始化时间的时候往往是向 1970/01/01 添加毫秒数,JavaScriptSerializer 进行序列化的时候也会格式化为距离1970/01/01 到当前时间点 GMT+0 时间的毫秒数,如果直接反序列化可以看到少了8小

  • C# JavaScriptSerializer序列化时的时间处理详解

    最近被序列化困扰了一下下.原因看下面代码 class Program { static void Main(string[] args) { var user = new User { UserId = "sb", CreateDate = DateTime.Now }; var serialier = new JavaScriptSerializer(); var json = serialier.Serialize(user); Console.WriteLine(json); C

  • C#使用Json.Net进行序列化和反序列化及定制化

    序列化(Serialize)是将对象转换成字节流,并将其用于存储或传输的过程,主要用途是保存对象的状态,以便在需要时重新创建该对象:反序列化(Deserialize)则是将上面的字节流转换为相应对象的过程:在.Net阵营中,Json.Net是由官方推荐的高性能开源序列化/反序列化工具,其官方网站:https://www.newtonsoft.com/json: 一.将对象序列化为Json格式字符串 首先是正常的序列化操作,对于给定的类: private class MyClass { publi

  • C#中序列化实现深拷贝,实现DataGridView初始化刷新的方法

    winfrom中DataGridView在的单元格在编辑时候会修改它的数据源的,如果我们遇到这样一种情景,刷新数据源到原始状态,这个时候要么数据源的重新获取绑定,要么通过拷贝一份原始档的数据再绑定处理,这里介绍拷贝方式处理. 大致代码如下: 1.目标对需要序列化,并实现ICloneable 接口: [Serializable] public class DtoColumn : ICloneable2.实现接口方法Clone: public object Clone() { using (Memo

  • C#中Json反序列化的实现方法

    前言 Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自行在nuget中导入 Json源数据: var data = "{'jingdong_ldop_receive_trace_get_responce':{'code':'0','querytrace_result':{'data':[{'opeTitle':'快递签收','opeRemark':'货物已交付京东物流','

  • C#中Json的简单处理方法

    命名空间:Windows.Data.Json 在Windows Runtime中,可以使用Json类对获取的Json字符串进行操作,相比DataContractJsonSerializer类操作更加直观. 例如获取一个绕口令API返回的Json中的对象: //返回的Json字符串: { "code":200, "msg":"success", "newslist":[ { "content":"小

  • golang中json反序列化可能遇到的问题

    前言 在golang中,当浮点数超过一定数值的时候,golang会把它弄成科学计数法的形式进行显示(好像只要大于七位数就变成科学计数法了) var val float64 val = 1000000 fmt.Println(val) // ==> 1e+06 而在日常开发中,我们经常遇到这样一个问题,就是要反序列化前端传递来的json,因为数据结构未知,所以我们便会使用map[string]interface{}来接收反序列化的结果.由于golang将json解析到interface{}类型的时

  • ASPNET中JSON的序列化和反序列化的方法

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大括号'{}',中括号'[]',逗号',',冒号':',双引号'""'组成,包含的数据类型有Object,Number,Boolean,String,Array, NULL等. JSON具有以下的形式: 对象(Object)是一个无序的"名值对"集合,一个对象以"

  • 实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法)

    对于服务器端开发人员而言,调用第三方接口获取数据,将其"代理"转化并返给客户端几乎是家常便饭的事儿.    一般情况下,第三方接口返回的数据类型是json格式,而服务器开发人员则需将json格式的数据转换成对象,继而对其进行处理并封装,以返回给客户端. 在不是特别考虑效率的情况下(对于搜索.缓存等情形可以考虑使用thrift和protobuffer),通常我们会选取jackson包中的ObjectMapper类对json串反序列化以得到相应对象.通常会选取readValue(Strin

  • .NET中JSON的序列化和反序列化的几种方式

    一.什么是JSON JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立 于编程语言的文本格式来存储和表示数据.简洁和清晰的层次结构使得JSON 成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升 网络传输效率. 是JavaScript用来处理数据的一种格式,大部分是用来处理JavaScript和web服务器端之间的数据

  • Swift 中的 JSON 反序列化示例详解

    目录 业界常用的几种方案 手动解码方案,如 Unbox(DEPRECATED) 阿里开源的 HandyJSON 基于 Sourcery 的元编程方案 Swift build-in API Codable 属性装饰器,如 BetterCodable 各个方案优缺点对比 Codable 介绍 原理浅析 Decoder.Container 协议 自研方案 功能设计 Decoder.Container 具体实现 再议 PropertyWrapper 应用场景示例 单元测试 性能对比 业界常用的几种方案

  • SpringBoot读取资源目录中JSON文件的方法实例

    目录 前言 思路 示例 1.Maven依赖 2.json资源文件 3.读取json的Service 4.测试接口 最后 前言 最近在做一个公共相关的内容,公告里边的内容,打算做成配置化的. 但是考虑到存储到数据库,需要建立数据库表: 存储到配置组件中,担心配置组件存储不下: 于是决定先暂时存储到项目中的资源目录中,以JSON的格式存储,待观察公告这一模块的需求变更如何,再另行做打算. 本文分享SpringBoot读取资源目录JSON配置文件的相关方法. 思路 使用Spring的ResourceU

  • javascript中json对象json数组json字符串互转及取值方法

    今天用到了json数组和json对象和json类型字符串之间互转及取值,记录一下: 1.json类型的字符串转换为json对象及取值 var jsonString = '{"bar":"property","baz":3}'; var jsObject = JSON.parse(jsonString); //转换为json对象 alert(jsObject.bar); //取json中的值  2.json对象转为json类型的字符串 var js

随机推荐