C#如何通过匿名类直接使用访问JSON数据详解
作者:suikhan 发布时间:2023-07-20 12:31:53
标签:json数据,c#,匿名类
实验目的
在C#和Rest/Restful以及其它的Web服务交互过程中,大量使用到JSON传递数据,如何快捷的转化C#对象到JSON和转化JSON到C#对象,成为开发过程中频繁使用的内容。传统的方式下,我们需要定义和JSON对象同步的C#类并实例化成对象以遍操作,这里提供了一个直接使用匿名类的方式,相较于传统方式可以少定义一些类,操作更加简便。
开发环境
实现步骤
1.创建工程:控制台程序,命名为JsonTest
2.添加组件:增加JSON组件
第一步:右键点击项目,选择“管理NuGet程序包”菜单
第二步:在"NuGet: JsonTest"选项卡中选择浏览,输入json后回车,选择Newtonsoft.Json,选择版本后点击安装按钮。
第三步:完成安装
3.编写代码:简单结构
JSON格式如下:
{
"name":"张三",
"sex":"男",
"birthday": "2018-02-09"
}
CSharp代码
using Newtonsoft.Json;
using System;
namespace JsonTest
{
class Program
{
static void Main(string[] args)
{
string jsonstr = JsonConvert.SerializeObject(new
{
name = "张三",
sex = "男",
birthday = "2018-02-09"
});
Console.WriteLine("对象序列化后的字符串为:");
Console.WriteLine(jsonstr);
Console.WriteLine("\n\n字符串反序列化为对象后的值为:");
var jsonobj = JsonConvert.DeserializeObject<dynamic>(jsonstr);
Console.WriteLine("姓名:" + jsonobj.name);
Console.WriteLine("性别:" + jsonobj.sex);
Console.WriteLine("生日:" + jsonobj.birthday);
Console.Read();
}
}
}
执行结果
4.编写代码:数组的操作
CSharp代码
using Newtonsoft.Json;
using System;
namespace JsonTest
{
class Program
{
static void Main(string[] args)
{
string jsonstr = JsonConvert.SerializeObject(new[]{
new {
name = "张三",
sex = "男",
birthday = "2018-02-09"
},
new{
name = "李四",
sex = "男",
birthday = "2018-02-09"
}
});
Console.WriteLine("对象序列化后的字符串为:");
Console.WriteLine(jsonstr);
Console.WriteLine("\n\n字符串反序列化为对象后的值为:");
var jsonarr = JsonConvert.DeserializeObject<dynamic[]>(jsonstr);
foreach (var jsonobj in jsonarr)
{
Console.WriteLine("姓名:" + jsonobj.name);
Console.WriteLine("性别:" + jsonobj.sex);
Console.WriteLine("生日:" + jsonobj.birthday);
Console.WriteLine("---------------");
}
Console.Read();
}
}
}
执行结果
来源:https://www.jianshu.com/p/c4c7c631a7a9
0
投稿
猜你喜欢
- 在Linux中创建一个新进程的唯一方法是使用fork()函数。fork()函数是Linux中一个非常重要的函数,和以往遇到的函数有一些区别,
- C++11 引入一个全新的线程库,包含启动和管理线程的工具,提供了同步(互斥、锁和原子变量)的方法,我将试图为你介绍这个全新的线
- 实例如下:import java.lang.reflect.Field;import java.lang.reflect.Invocatio
- 多选和单选的不同之处单选的时候,选中一个就可以直接把结果返回,因此本身底部弹窗无需状态管理。但到多选的时候,需要知道当前选中的选项,有选项被
- 协议做如下规定:规定数据协议:序列号 长度 状态字 数据长度 数据1 &n
- [LeetCode] 131.Palindrome Partitioning 拆分回文串Given a string s, par
- 官网教程一、翻转(镜像)头文件 quick_opencv.h:声明类与公共函数#pragma once#include <opencv
- mapper文件使用in("str1","str2")mybatis的xxxMapper.xml文件
- 井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数
- 声明:下面的实例全部在linux下尝试,window下未尝试。有兴趣者可以试一下。文章针c初学者。c语言的强符号和弱符号是c初学者经常容易犯
- 背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上
- 一、SpringCache介绍Spring Cache 是一个优秀的缓存组件。自Spring 3.1起,提供了类似于@Transaction
- java.lang.ArrayStoreException 分析这个demo来说明怎样排查一个spring boot 1应用升级到sprin
- 前言为什么用动静态库我们在实际开发中,经常要使用别人已经实现好的功能,这是为了开发效率和鲁棒性(健壮性);因为那些功能都是顶尖的工程师已经写
- 一、写在前面数据结构中的队列应该是比较熟悉的了,就是先进先出,因为有序故得名队列,就如同排队嘛,在对尾插入新的节点,在对首删除节点.jdk集
- 先看下效果:两种需求场景:1.广告页3s后跳转到首页2.短信验证码60s倒计时第一种的话,根据需求我们可以知道,我们想要的效果就是3s结束做
- using System; using System.Collections.Generic; using System.Text; usi
- 一、什么是iText?在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Js
- 昨天有朋友在公众号发消息说看不懂await,async执行流,其实看不懂太正常了,因为你没经过社会的毒打,没吃过牢饭就不知道自由有多重要,没
- 合成聚合复用原则合成复用原则又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP