首页 > 编程语言 >C#解析json的几种方式

C#解析json的几种方式

时间:2024-05-30 10:24:58浏览次数:28  
标签:Name C# Age Person json 解析 string name

json格式的数据是javascript原生的一种数据格式,比xml更简洁。

它有两种形式:json对象和json对象数组。 

在此之前,有必要解释几个基本概念:

json字符串,就是string,它一定是由双引号包起来的,如"{'name':'jerry'}"。这是一个string,尽管去掉双引号后它就是一个json对象。

json对象,就是以大括号开头的对象,如{"name":"jerry"}; 而获取name值的方式就是 json.name 或者 json["name"];

json数组,就是以中括号开头的json对象数组,如[{"name":"tom"},{"name":"jerry"}];获取值的方式是 json[0].name 或 json[0]["name"]; //这里取第一个name

搞清楚基本概念后,理解起来就容易了。

而把符合json格式的string,转换成json对象并提取其中值的方法,就是本文要重点介绍的。

(一):引用 newtonsoft.json.linq命名空间

json对象

在C#中可以,利用其JObject类进行一些操作:

string json = "{'name':'terry','age':'21'}";
JObject jsonObj = JObject.Parse(json); //尝试将字符串转换成json对象
string name = jsonObj["name"]; //在js中习惯用jsonObj.name,这里不行
string age = jsonObj["age"];
Response.Write(name + "<br />" + age);

json数组

类似JObject,这里借助JArray类:

string json = "[{'name':'tom'},{'name':'jerry'},8,10]";
JArray arr = JArray.Parse(json); //尝试将字符串转换成json数组
Response.Write(arr[1]["name"]); //输出jerry

其实这个json数组很奇怪,第三个和第四个没有键值对了,就一个值,也是可以解析的:

Response.Write( arr[3] );   //输出10

(二):引用 newtonsoft.json命名空间

1.需要建立与json相对应的类:

 public class Person
 {
      public string Name { get; set; }
      public int Age { get; set; }
 }

2.string转对象

string json = "{'Name':'tom','Age':'21'}";
Person p = JsonConvert.DeserializeObject<Person>(json); //将字符串转换成json对象
Response.Write(p.Name); //输出tom.这里不能p["Name"]

  3.string转数组

string json = "[{'Name':'a','Age':1},{'Name':'b','Age':2}]";
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json);//用List作为容器装Person数组
Response.Write(persons[0].Name); //输出a.这里不能persons[0]["Name"]

这个把string转换成对象或者数组的过程,叫做反序列化。

 

说到反序列化,顺便提一下序列化。

序列化,指把对象和数组变为字符串的过程。

例1.

Person p = new Person(){Name="jerry" , Age=23};
string json = JsonConvert.SerializeObject(p);

例2.

List<Person> persons=new List<Person>()
 {
      new Person(){ Name="a",Age=1},
      new Person(){ Name="b",Age=2},
      new Person(){ Name="c",Age=3},
      new Person(){ Name="d",Age=4}
 };
string json = JsonConvert.SerializeObject(persons)

 这里不区分JArray和JObject,都是用JsonConvert.SerializeObject()方法;

标签:Name,C#,Age,Person,json,解析,string,name
From: https://www.cnblogs.com/lgx5/p/18221845

相关文章

  • cocos 无法设置Node layer属性
    升级到3.83之后突然无法设置Nodelayer属性,编译器打开之后无法保存1.删除temp,library文件夹后重新打开,(仍无法解决。)。原以为升级之后问他资源没有升级导致2.为什么打开prefab之后又恢复layer属性??分析原因:cocoseditor里的属性是从全局变量里读.在浏览器环境中cc是一个全......
  • css23 CSS Links, Cursors
    https://www.w3schools.com/css/css_link.asp CSSLinks  WithCSS,linkscanbestyledinmanydifferentways.StylingLinksLinkscanbestyledwithanyCSSproperty(e.g.color,font-family,background,etc.).Examplea{  color:hotpink;}&l......
  • mac,linux 查看文件编码
    查看文件编码可以通过以下几种方式:在类unix编程时,在读取文本的时候会遇到文本的编码问题,这时候就要查看文件内容的编码了,下面是查看编码的几种方式1.在Vim中可以直接查看文件编码:setfileencoding即可显示文件编码格式。如果你只是想查看其它编码格式的文件或者想解决用Vim......
  • 深入探讨Function Calling:在Semantic Kernel中的应用实践
    引言上一章我们熟悉了OpenAI的functioncalling的执行原理,这一章节我们讲解一下functioncalling在SemanticKernel的应用。在OpenAIPromptExecutionSettings跟LLM交互过程中,ToolCallBehavior的属性之前我们的章节有介绍过ToolCallBehavior:属性用于获取或设置如何......
  • Highcharts绘制饼图
    代码案例<html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"> <metaname="viewport"content="width=device-width,initial-scale=1"> <title>HighchartsExa......
  • @Transactional(rollbackFor = Exception.class) 事务失效 A加了@Transactional注解
    @Transactional(rollbackFor=Exception.class)事务失效,一个方法A上加了这个注解,在方法A中调用了B方法,A方法中有数据库操作,B方法中也有,现在问题是,B方法中事务失效了,怎么保证不失效 在Spring框架中,使用@Transactional注解可以很方便地管理事务,但是如果你在方法A中调用了方法B,......
  • Springboot报class path resource [xxxxx.json] cannot be resolved to URL because i
    当Springboot解析resources文件下的json文件时,在本地环境好用,部署到服务器上找不到文件内容报错classpathresource[xxxxx.json]cannotberesolvedtoURLbecauseitdosenotexist问题排查(1)pom.xml文件配置<build><resources><resource><d......
  • error in ./node_modules/@intlify/core-base/dist/core-base.cjs
    ERRORFailedtocompilewith1error......
  • Chapter 4 Problems
    T1证明\(\negA\rightarrowB,\negA\rightarrow\negB\vdashA\)可用定理:\(\vdash(\negA\rightarrowA)\rightarrowA\)Proof\[\begin{aligned}A_1:\quad&\negA\rightarrowB&\in\Gamma\\A_2:\quad&\negA\rightarrow......
  • css22 CSS Icons
    https://www.w3schools.com/css/css_icons.aspIconscaneasilybeaddedtoyourHTMLpage,byusinganiconlibrary.  HowToAddIconsThesimplestwaytoaddanicontoyourHTMLpage,iswithaniconlibrary,suchasFontAwesome.Addthenameofth......