.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,在部落格園中點一個關注和推薦。