C# JSON 常用方法 - Json字符串转对象

2023-10-30

  1. 创建项目:ConsoleApplication_Json
  2. 选择项目右键管理NuGet程序包
  3. 搜索Newtonsoft.Json 并下载安装
  4. 选择项目添加 JsonHelper.cs
  5. 添加引用:
using Newtonsoft.Json;
  1. .编写Json处理方法代码,如下:
using System;
using Newtonsoft.Json;

namespace ConsoleApplication_Json
{
    public class JsonHelper
    {
        public static decimal ToDecimal(object obj, decimal defaultValue = 0)
        {
            string s = obj == null ? "" : obj.ToString();
            decimal result;
            if (!decimal.TryParse(s, out result))
            {
                result = defaultValue;
            }
            return result;
        }

        public static string Obj2Json(object value)
        {
            return JsonConvert.SerializeObject(value);
        }

        /// <summary>
        /// 将JSON 字符串转换成对应的类型
        /// </summary>
        /// <typeparam name="T">转换后的类型</typeparam>
        /// <param name="s">需转换的字符串</param>
        /// <returns></returns>

        public static T Json2Obj<T>(string s)
        {
            try
            {
                return JsonConvert.DeserializeObject<T>(s);
            }
            catch (Exception ex)
            {
                return default(T);
            }

        }
    }
}

  1. .自定义Json格式模拟数据
{
	"id": "ko09895dd6g565d5222242125",
	"status": true,
	"httpstatus": 200,
	"data": [{
		"room": {
			"field1": "955gg2015",
			"field2": "G1020",
			"field3": "VIP",
			"field4": "大包",
			"field5": "李春凤",
			"field6": "10086611"
		},
		"address": "这里是个地址信息",
		"sign": "预订"
	}, {
		"room": {
			"field1": "955gg2016",
			"field2": "G1022",
			"field3": "VIP_null",
			"field4": "中等包",
			"field5": "李春凤",
			"field6": "10086622"
		},
		"address": "这里是个地址信洗第二个",
		"sign": "预订"
	}],
	"nextLink": "www.baidu.com"
}
  1. .格式化Json字符串用于测试
{\"id\": \"ko09895dd6g565d5222242125\", 	\"status\": true, 	\"httpstatus\": 200, 	\"data\": [{ 		\"room\": { 			\"field1\": \"955gg2015\", 			\"field2\": \"G1020\", 			\"field3\": \"VIP\", 			\"field4\": \"大包\", 			\"field5\": \"李春凤\", 			\"field6\": \"10086611\" 		}, 		\"address\": \"这里是个地址信息\", 		\"sign\": \"预订\" 	}, { 		\"room\": { 			\"field1\": \"955gg2016\", 			\"field2\": \"G1022\", 			\"field3\": \"VIP_null\", 			\"field4\": \"中等包\", 			\"field5\": \"李春凤\", 			\"field6\": \"10086622\" 		}, 		\"address\": \"这里是个地址信洗第二个\", 		\"sign\": \"预订\" 	}], 	\"nextLink\": \"www.baidu.com\" }
  1. .新建刚才与Json格式对应的类:RoomResponse.cs,代码如下
using System.Collections.Generic;

namespace ConsoleApplication_Json
{
    public class RoomResponse
    {
        public string id { get; set; }
        public string status { get; set; }
        public string httpstatus { get; set; }
        public List<Data> data { get; set; }
        public string nextLink { get; set; }
    }    
    public class Data
    {
        public Room room { get; set; }
        public string address { get; set; }
        public string sign { get; set; }
    }
    public class Room
    {
        public string field1 { get; set; }
        public string field2 { get; set; }
        public string field3 { get; set; }
        public string field4 { get; set; }
        public string field5 { get; set; }
        public string field6 { get; set; }
    }   
   
}

  1. .进入Program.cs 文件,编辑代码如下:
namespace ConsoleApplication_Json
{
    class Program
    {
        static void Main(string[] args)
        {
            var strJson = "{\"id\":\"ko09895dd6g565d5222242125\",\"status\":true,\"httpstatus\":200,\"data\":[{\"room\":{\"field1\":\"955gg2015\",\"field2\":\"G1020\",\"field3\":\"VIP\",\"field4\":\"大包\",\"field5\":\"李春凤\",\"field6\":\"10086611\"},\"address\":\"这里是个地址信息\",\"sign\":\"预订\"},{\"room\":{\"field1\":\"955gg2016\",\"field2\":\"G1022\",\"field3\":\"VIP_null\",\"field4\":\"中等包\",\"field5\":\"李春凤\",\"field6\":\"10086622\"},\"address\":\"这里是个地址信洗第二个\",\"sign\":\"预订\"}],\"nextLink\":\"www.baidu.com\"}";
            var test1 = JsonHelper.Json2Obj<RoomResponse>(strJson);
        }
    }
}

  1. .加断点,调试文件。
  2. .数据成功转换成类型对象。
  3. 补充:
        /// <summary>
        /// 使用JObjectParse
        /// 获取Json字符串中的某个值
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static JObject JObjectParse(string s)
        {
            try
            {
                var obj = JObject.Parse(s);
                return obj;
            }
            catch (Exception)
            {
                return null;                
            }
           
        }

        /// <summary>
        /// 使用JavaScriptSerializer
        /// 获取Json字符串中的某个值
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static Dictionary<string, object> JavaScriptSerializer(string s)
        {
            try
            {
                JavaScriptSerializer Jss = new JavaScriptSerializer();
                Dictionary<string, object> DicText = (Dictionary<string, object>)Jss.DeserializeObject(s);
                return DicText;
            }
            catch (Exception ex)
            {
                throw;
            }
        }
  1. 该方法用于获取每个节点对应的内容,可直接通过obj[“data”]取出数据。
  2. 先这样吧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# JSON 常用方法 - Json字符串转对象 的相关文章

  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 如何在 ASP.NET MVC 3 的 Razor 视图中编码嵌入的 javascript?

    如何在以下上下文中正确编码 JavaScript 我的 JSON 对象中的值是由应用程序管理员设置的 因此我假设它们需要正确编码 对于 HTML 和 JavaScript 都是如此 我在用着System Web Script Seriali
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据

随机推荐

  • 央企数字化转型实践思考

    01 数字化转型的内涵与价值效益 数字化转型是顺应新一轮科技革命和产业变革趋势 不断深化应用云计算 大数据 物联网 人工智能 区块链等新一代信息技术 激发数据要素创新驱动潜能 打造和提升信息时代的生存与发展能力 加速业务优化升级和创新转型
  • Python爬虫:如何下载汽车之家的数据(完整代码)

    欢迎来到我的博客 作者 秋无之地 简介 CSDN爬虫 后端 大数据领域创作者 目前从事python爬虫 后端和大数据等相关工作 主要擅长领域有 爬虫 后端 大数据开发 数据分析等 欢迎小伙伴们点赞 收藏 留言 关注 关注必回关 一 确定目标
  • C语言 项目 CRM系统(客户信息管理系统)

    项目目标 项目需求说明 系统界面 1 添加客户界面 通过编号来区分客户 2 删除客户界面 对用户输入的编号进行核查 存在与否 合法与否 3 显示客户列表界面 4 修改客户信息的界面 项目设计 Customer结构体的设计 CRM系统结构框架
  • 基于机器学习方法对销售预测的研究

    很高兴 InfoQ 团队和 百分点大数据学院 牵头举办此次活动 百分点大数据学院 是由百分点发起的大数据领域专业 开放的分享交流平台 通过定期举办线上线下活动 邀请大数据领域学术专家 技术领袖 企业高层 分享行业 技术 应用等方面最前沿的经
  • PowerMock(一):PowerMock的基本使用

    文章目录 为啥要使用PowerMock PowerMock的使用 环境 引入依赖 注解说明 mock普通方法 mock抛出异常 mock新建对象 mock无返回值的方法 mock被final修饰的方法 参数模糊匹配 mock静态方法 moc
  • 下载安装office2019

    Hello 大家好 我是小喵 支付宝搜索 321994 领红包喽 前几天答应给大家写一篇关于安装激活Office2019的文章 一直在准备 准备制作GIF动图 制作图片等 把我电脑上的Office反复安装卸载 折腾的不像样子 终于 功夫不负
  • 在B端供应链上,看见企业增长的「密码」

    在被疫情重塑的B端市场里 在这个新的产业互联时代 发展的新答案到底是什么 作者 皮爷 出品 产业家 2022年中秋节 一款特殊的牛奶让伊利再次在B端市场破圈 在人们司空见惯的牛奶包装上 青花瓷的样本图案清晰可见 典雅大气 蓝白相间之中充斥着
  • [学C日记]---循环

    1 计算 n的阶乘 调用阶乘函数 三种循环 1 计算阶乘 int main int n 0 int m 0 scanf d n m jiecheng n printf d n m system pause return 0 int jiec
  • wsl 固定ip 方法 一劳永逸

    目前网上有很多办法 有用host 有修改bash的 非常多 也非常麻烦 目前发现这种方法最为简单 添加一个开机启动项 配置一个netsh 1 准备一个vbs 并添加到开机启动项 Set ws WScript CreateObject WSc
  • 更改内存频率导致电脑用不了怎么解决?

    目录 台式机 解决办法 笔记本 解决办法 电脑能开机 显示器指示灯闪烁但就是不亮显示器 主要问题是内存 内存超频不能超过本身内存卡的极限 至于内存卡的极限在哪里 你可以上网查一下你的内存卡的信息 超过了极限基本上一改电脑就跟死机差不多 运行
  • 2022国赛17:打印服务

    大赛试题内容 七 打印服务 任务描述 为了提高打印服务效率 节省成本 请采用共享打印服 务 实现共享打印的安全性 1 在 windows4 上安装打印机 驱动程序为 MS Publisher Color Printer 名称和共享名称均为
  • 排序算法(6)----计数排序

    不知道为什么 突然编辑器不支持颜色丰富的intellij IDEA直接复制了 博主有点沮丧 因此我先用图片的形式展示并分析 然后在最后会将全部代码呈上 排序思想 在一个数组中 对于每一个数据 都统计有多少个数字小于它 就能反应出它当前所在的
  • Centos 7开机菜单设置

    Centos 7的开机菜单设置主要是能过 etc grub2 cfg etc grub2 cfg gt boot grub2 grub cfg timeout 5 为等待用户选择时间 当5秒钟没有选择 系统会启动默认的菜单 与centos
  • 基于阿里云服务器+wordpress构建自己的网站(全过程系列,无需任何编程知识)

    1 阿里云服务器配置 既然是基于阿里云服务器 那么当然是先得申请一个阿里云服务器 本博客使用的服务器是云服务器ECS 共享计算型 n4系列 阿里云对新用户有很多优惠活动 这个是我当时花了69块钱买了一年 又通过某个渠道 返了60块钱 相当于
  • 数学建模美赛E、F题备考策略(自用,大部分复制粘贴)

    这里要讲一下故事的背景 我们小组三个人都是大一大二的学生 我的队友们都是数学专业的学生 所以比赛中的编程部分就交给了我这样的工业工程系的选手 我们在看完了历年赛题后一直认为 前面的几题我们都很难建立出很棒的模型 因此我们将目光对准E F两题
  • 为什么 Redis 中的事物很玄学,没人使用 ?

    1 为什么不使用 Redis 中的事物 Redis 中的事物是 弱事物 它在操作的时候 是将多个命令全部加入到事物队列中 然后通过 exec 命令一次性执行所有命令 这样做的好处是可以减少网络往返的次数 提高效率 它的使用示例如下 Redi
  • 输入英文有空格 解决方法

    shift 空格 直接搞定
  • Uniform convergence

    In the mathematical field of analysis uniform convergence is a mode of convergence of functions stronger than pointwise
  • vue3 + elementplus 教程

    一 初始化 安装 vue cli g 全局安装 vue cli npm install vue cli g 或者 yarn global add vue cli 二 创建项目 vue create 项目名 进行项目初始化 D workspa
  • C# JSON 常用方法 - Json字符串转对象

    创建项目 ConsoleApplication Json 选择项目右键管理NuGet程序包 搜索Newtonsoft Json 并下载安装 选择项目添加 JsonHelper cs 添加引用 using Newtonsoft Json 编写