JSON操作
1.简介
元素类型 | 标识 | 举例 |
---|---|---|
数字 | 直接给出 | "num":666 |
字符串 | ""标识 | "name":"xiaoming" |
对象 | {}标识 | "p":{"fruit":"apple"} |
数组 | []标识 | "colors":["red","blue","green"] |
{
//字符串
"type": "truck",
//int值
"wheeks": 6,
//对象
"owner": {
"name": "John",
"age": "42"
},
//数组
"colors": [ "red", "blue", "green" ]
}
2.读取
json文件
[
{
"Name": "小萌",
"Date": "20200909",
"Have": {
"Toys": [ "car", "ipad", "phone" ],
"Money": 120000
}
},
{
"Name": "小名",
"Date": "20200809",
"Have": {
"Toys": [ "rocket", "xbox", "sp" ],
"Money": 180000
}
}
]
读取内容
内容 | 操作 | |
---|---|---|
载入JSOON | JsonDocument.Parse(信息Stream) | |
获取根部元素 | JSON文件对象.RootElement | |
获取数组元素 | JSON文件对象[数组下标int] | |
获取属性 | JSON文件对象.GetProperty(属性string) |
using(var fs=new FileStream("test.json",FileMode.Open))
{
using (var cmt = JsonDocument.Parse(fs))
{
var t = cmt.RootElement[0].GetProperty("Have").GetProperty("Toys")[2];
WriteLine(t);
}
}
遍历
JSON文件对象.EnumerateArray()获取可迭代集合
using (var fs = new FileStream("data.json", FileMode.Open))
{
using (JsonDocument js = JsonDocument.Parse(fs))
{
foreach (var item in js.RootElement.EnumerateArray())
{
foreach(var jtem in item.GetProperty("Have").GetProperty("Toys").EnumerateArray())
{
WriteLine(jtem);
}
}
}
}
3.写入
内容 | 操作 | |
---|---|---|
用来写入数组开始和结束 | WriteStartArray()和WriteEndArray() | |
写入对象开始和结束 | WriteStartObject()和WriteEndObject() | |
写入字符串 | WriteString(名称String,内容string) | |
写入数字 | WriteNumber(名称String,内容string) |
using(var stream=new FileStream("data.json",FileMode.Create))
{
using (var jw = new Utf8JsonWriter(stream))
{
//创建数组左中括号
jw.WriteStartArray();
//建立对象左大括号
jw.WriteStartObject();
//写入字符串
jw.WriteString("date", DateTime.UtcNow);
//写入数字
jw.WriteNumber("temp", 42);
//建立对象右大括号
jw.WriteEndObject();
//建立对象左大括号
jw.WriteStartObject();
//写入字符串
jw.WriteString("date", DateTime.UtcNow);
//写入数字
jw.WriteNumber("temp", 43);
//建立对象右大括号
jw.WriteEndObject();
//创建数组右中括号
jw.WriteEndArray();
}
}
写入结果
[
{
"date": "2020-03-18T14:11:04.9090202Z",
"temp": 42
},
{
"date": "2020-03-18T14:11:04.9106672Z",
"temp": 43
}
]
4.序列化与反序列化
定义与json文件对应的类,在序列化与反序列化过程中传入类型
4.1反序列化
得到一个对象
var obj=JsonSerializer.Deserialize<Person>(str);
var obj=JsonSerializer.Deserialize<List<Person>>(str);
4.2序列化
得到JSON字符串
var str=JsonSerializer.Serialize<Person>(ps);
var dt=JsonSerializer.Deserialize<List<Person>>(str);
XML操作
1.简介
类型 | 标识 | 举例 | |
---|---|---|---|
文档声明 | <?xml version="1.0"?> |
<?xml version="1.0" encoding="utf-8" ?> |
|
元素/标签 | <标签名></标签名> |
<p>哈哈哈哈</p> |
|
属性 | <标签名 属性="值"/> |
<student age=22/> |
|
注释 | <!--注释内容--\> |
<!--这是标签--\> |
|
CDATA区 | <![CDATA[不想解析的内容]]> |
<![CDATA[<p>哈哈哈哈</p>]]> |
<?xml version="1.0" encoding="utf-8" ?>
<students>
<student>
<name>小明</name>
<age>17</age>>
<class>三年一班</class>
<read>金瓶梅</read>
</student>
<student>
<name>小冰</name>
<age>16</age>>
<class>五年一班</class>
<read>十日谈</read>
</student>
<student>
<name>大明</name>
<age>17</age>>
<class>五年二班</class>
<read>初刻拍案惊奇</read>
</student>
</students>
2.读取
内容 | 操作 | |
---|---|---|
创建xml | XmlDocument doc = new XmlDocument(); | |
载入xml | doc.Load(文件名string) | |
获取第一个匹配的节点 | var 节点=xml.SelectSingleNode(节点名string); | |
获取子节点集合 | 节点.ChildNodes | |
获取属性值 | 节点.GetAttribute(属性名string) | |
获取节点名称 | 节点.Name | |
获取节点内字符 | 节点.InnerText |
//创建xml
var xml = new XmlDocument();
//载入xml
xml.Load("yeah.xml");
//获取第一个匹配的节点
var node=xml.SelectSingleNode("students");
//遍历
foreach(var item in node.ChildNodes)
{
var e = item as XmlElement;
//获取节点名称
WriteLine(e.Name);
//获取节点属性
WriteLine(e.GetAttribute("姓名"));
WriteLine(e.GetAttribute("学号"));
WriteLine(e.GetAttribute("身高"));
//遍历子节点
foreach (var jtem in e.ChildNodes)
{
var k = jtem as XmlElement;
WriteLine(k.Name+":"+k.InnerText);
}
}
3.写入
内容 | 操作 | |
---|---|---|
创建xml | XmlDocument doc = new XmlDocument(); | |
添加文档声明 | var 节点=doc.CreateXmlDeclaration("1.0", "utf-8", "yes"); | |
添加节点 | var 节点=doc.CreateElement(名称string); | |
添加进入xml | doc.AppendChild(节点); | |
设置属性 | dt.SetAttribute(属性名string,属性值string) | |
保存 | doc.Save(文件名string) |
Random rnd = new Random(666);
//创建xml
XmlDocument doc = new XmlDocument();
//添加文档声明
var declaration=doc.CreateXmlDeclaration("1.0", "utf-8", "yes");
doc.AppendChild(declaration);
//添加根节点
var root=doc.CreateElement("students");
doc.AppendChild(root);
//循环添加
for(int i=0;i<3;++i)
{
//添加子节点
var child = doc.CreateElement("student");
//设置属性
child.SetAttribute("姓名", "小明");
child.SetAttribute("学号", rnd.Next(10000,100000).ToString());
child.SetAttribute("身高", rnd.Next(100,150).ToString());
root.AppendChild(child);
//添加孙子节点
var grade1 = doc.CreateElement("语文成绩");
grade1.InnerText = rnd.Next(100).ToString();
var grade2 = doc.CreateElement("数学成绩");
grade2.InnerText = rnd.Next(100).ToString();
var grade3 = doc.CreateElement("英语成绩");
grade3.InnerText = rnd.Next(100).ToString();
child.AppendChild(grade1);
child.AppendChild(grade2);
child.AppendChild(grade3);
}
//保存文件
doc.Save("yeah.xml");
4.序列化与反序列化
定义与xml文件对应的类,在序列化与反序列化过程中传入类型
4.1序列化
T t = new T()
{
date=DateTime.Now,
temp=666,
};
//xml序列化器
XmlSerializer serializer = new XmlSerializer(typeof(T));
//打开文件流
using(FileStream fs=new FileStream("test.xml",FileMode.Create))
{
//序列化
serializer.Serialize(fs,t);
}
4.2反序列化
//xml序列化器
XmlSerializer serializer = new XmlSerializer(typeof(T));
//打开文件流
using(FileStream fs=new FileStream("test.xml",FileMode.Open))
{
//反序列化
var t=serializer.Deserialize(fs) as T;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。