.NETCore C# 中级篇2-6 Json与XML
.NETCoreCSharp 中级篇2-6
本节内容为Json和XML操作
简介
Json和XML文本是计算机网络通信中常见的文本格式,其中Json其实就是JavaScript中的数组与对象,体现了一种面向对象的方式,而XML则是一种可标记语言,类似于我们的html标签,他更多的是体现一种层级关系。
但无论哪一种文本格式,我们都有学习的必要。
JSON
首先,介绍一下Json:
Json其实就是JavaScript里面的对象和数组,通过不同的组合,可以构成许多不同的数据结构。其中使用花括号的是对象,中括号的是数组,例如:
{
"data":
{
"people":
[
{"name":"ppppp","age":18}
]
},
"status":0
}
这里面,data就是一个对象,而people就是一个数组。
如果你要处理Json数据,你在nuget上可以找到许多适宜的库,在这里,我是用的是LitJson,这可能是一个比较少见的库,但是我觉得很好用。
这里我给出我们的免费api地址https://www.sojson.com/api/weather.html,这里你可以请求到我们的json文本。
对于LitJson,它充分的阐明了我们Json的核心——数组与对象。对于LitJson,数组使用List,对象则直接创建一个类进行处理。对于上面的例子,我们可以构造出如下的类关系
public class data
{
public List<People> people{ get; set; }
public int status{ get; set; }
}
// 下面操作将json文本转换成data的对象
Main()
{
JsonContent jsonc = JsonMapper.ToObject<data>(json);
foreach(var t in data)
}
更多内容可以看我的这篇博文Json处理实战,以及LitJson的官网
XML
XML也是广泛应用于网络信息交换的一种常见文本格式,他的书写有点类似于我们的html,正如之前所说,他更多的是阐明一种层级关系。例如下文便是一个常见的xml文本的格式。
<Computers>
<Computer ID="11111111" Description="Made in USA">
<name>Surface</name>
<price>5000</price>
</Computer>
<Computer ID="2222222" Description="Made in USA">
<name>IBM</name>
<price>10000</price>
</Computer>
<Computer ID="3333333" Description="Made in USA">
<name>Apple Mac</name>
<price>10000</price>
</Computer>
</Computers>
在C#中,我们操作XML同样的有许多库,这里我们使用XmlDocument进行操作。
XmlDocument类中的常用方法:
- Load(string path)加载文件路径的Xml
- SelectSingleNode(string node)选中节点
- ChildNodes,属性不是函数,用于获取所有子节点,返回XmlNodeList对象
- HasChildNodes属性,判断是否有子节点
- CreateElement创建新节点
- AppendChild(XmlElement node)追加子节点
- InsertBefore(XmlElement node,XmlElement ChildeNodes)向前插入
- SetAttribute(string name,string value)为指定节点的新建属性并赋值
- InnerText属性,获取内部文本
- Save()保存
XmlDocument myXmlDoc = new XmlDocument();
//加载xml文件(参数为xml文件的路径)
myXmlDoc.Load(xmlFilePath);
//获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点
XmlNode rootNode = myXmlDoc.SelectSingleNode("Computers");
//分别获得该节点的InnerXml和OuterXml信息
string innerXmlInfo = rootNode.InnerXml.ToString();
string outerXmlInfo = rootNode.OuterXml.ToString();
//获得该节点的子节点(即:该节点的第一层子节点)
XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
foreach (XmlNode node in firstLevelNodeList)
{
//获得该节点的属性集合
XmlAttributeCollection attributeCol = node.Attributes;
foreach (XmlAttribute attri in attributeCol)
{
//获取属性名称与属性值
string name = attri.Name;
string value = attri.Value;
Console.WriteLine("{0} = {1}", name, value);
}
//判断此节点是否还有子节点
if (node.HasChildNodes)
{
//获取该节点的第一个子节点
XmlNode secondLevelNode1 = node.FirstChild;
//获取该节点的名字
string name = secondLevelNode1.Name;
//获取该节点的值(即:InnerText)
string innerText = secondLevelNode1.InnerText;
Console.WriteLine("{0} = {1}", name, innerText);
//获取该节点的第二个子节点(用数组下标获取)
XmlNode secondLevelNode2 = node.ChildNodes[1];
name = secondLevelNode2.Name;
innerText = secondLevelNode2.InnerText;
Console.WriteLine("{0} = {1}", name, innerText);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
博主不常用xml,更多内容请参考微软官方文档以及https://www.cnblogs.com/zhengwei-cq/p/7242979.html的这篇博文
如果我的文章帮助了您,请您在github.NETCoreGuide项目帮我点一个star,在博客园中点一个关注和推荐。
.NETCore C# 中级篇2-6 Json与XML的更多相关文章
- .NETCore C# 中级篇2-4 一文带你完全弄懂正则表达式
.NETCoreCSharp 中级篇2-4 本节内容为正则表达式的使用 简介 有的时候,你是否有过这种需求:判断一个Ip地址.邮箱.密码规则是否合法.如果让你使用if一类的传统方法进行处理,你肯定会被 ...
- .NET Core C#中级篇2-5 常见实用类
.NETCore CSharp 中级篇2-5 本节内容为常见实用类和方法的使用 String.Format string.format方法是一个字符串格式化类,它里面的一些写法是对字符串进行指定格式的 ...
- 25个增强iOS应用程序性能的提示和技巧(中级篇)(3)
25个增强iOS应用程序性能的提示和技巧(中级篇)(3) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...
- 25个增强iOS应用程序性能的提示和技巧(中级篇)(2)
25个增强iOS应用程序性能的提示和技巧(中级篇)(2) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...
- 25个增强iOS应用程序性能的提示和技巧--中级篇
25个增强iOS应用程序性能的提示和技巧--中级篇 标签: ios性能优化内存管理 2013-12-13 10:55 738人阅读 评论(0) 收藏 举报 分类: IPhone开发高级系列(34) ...
- (转)25个增强iOS应用程序性能的提示和技巧--中级篇
在性能优化时,当你碰到一些复杂的问题,应该注意和使用如下技巧: 9.重用和延迟加载View10.缓存.缓存.缓存11.考虑绘制12.处理内存警告13.重用花销很大的对象14.使用Sprite Shee ...
- .NetCore获取Json和Xml格式的配置信息
本篇将和大家分享的是:如何获取Json和Xml格式的配置信息,主要介绍的是Configuration扩展方法的使用,因为netcore的web应用在Startup中已经默认嵌入appsettings. ...
- 25个增强iOS应用程序性能的提示和技巧 — 中级篇
本文由破船译自:raywenderlich 转载请注明出处:BeyondVincent的博客 _____________ 在开发iOS应用程序时.让程序具有良好的性能是非常关键的.这也是用户所期望的. ...
- Farseer.net轻量级开源框架 中级篇:DbFactory数据工厂
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 执行SQL语句 下一篇:Farseer.net轻量级开源框架 中级篇: 数据绑定 ...
随机推荐
- 服务器上无法调用Office组件的解决方法(HRESULT:0X800A03EC异常)
HRESULT:0X800A03EC的异常,经过多番查找,终于找到了解决方法,在 Windows 2008 中, 如果以 SYSTEM 用户跑, 系统会去寻找 SYSTEM 这个用户的 Profile ...
- Java设计模式整理
一.创建型模式 1.抽象工厂模式(AbstractFactory): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类. 案例:https://www.cnblogs.com/lfx ...
- Integer 数值比较
//Integer 源码 private static class IntegerCache { static final int low = -128; sta ...
- CSDN Markdown编辑器插入代码块时不能代码高亮
当我们点击插入代码块按钮,会提示我们在这里插入代码片,我们在三个单引号对之间输入代码后发现并没有实现代码块高亮, 如下图所示: <!DOCTYPE html> <html lang= ...
- python函数编程-偏函数partial function
一般的,通过设定函数参数的默认值,可以减低函数调用的难度.比如:int()函数可以把字符串转换成整数: >>> int(') 123 事实上,int()函数还提供额外的base参数, ...
- Delphi解析修改Json文件,基于superobject.pas(ISuperObject)
在经过一系列的波折后,还是觉得delphi读取并修改json文件来的方便: 在网络上找到一个delphi的三方库ISuperObject,添加到项目后直接引用就行: 下载地址 ISuperObject ...
- 上传图片报错-Failed to load resource:the server responded with a status of 413(Request Entity Too Large)
使用.netcore2.1 做文件上传时,要求是小于20M,上传3至5M都没问题,大于10M,提示错误[如标题],原来是nginx配置的原因 [HttpPost("Postcard" ...
- Android 数据库 SQLiteOpenHelper
public class DbOpenHelper extends SQLiteOpenHelper { private static String name = "test.db" ...
- openresty安装配置
在centos7上操作的. 上周搞了两天的Nginx的location rewrite,突然,对Nginx有了更好的理解. 所以持续一下. yum install readline-devel pcr ...
- 如何从Mac删除恶意广告软件,摆脱那些通过弹出广告或工具栏入侵Mac的恶意软件
厌倦了那些利用弹出式广告和工具栏之类入侵Mac的恶意软件?该如何摆脱Mac上的恶意软件呢?今天小编为大家带来两种方法从Mac 删除广告软件,甚至阻止它到达您的Mac,感兴趣的朋友一起来看看吧! 方法一 ...