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

Github

BiliBili主頁

WarrenRyan'sBlog

博客園


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM