C#中另辟蹊徑解決JSON / XML互轉的問題


最近在一個POC的項目中要用到JSON和XML的相互轉換, 雖然我知道很多類庫如JSON.NET具備這種功能, 但是我還是另辟蹊徑的使用Spider Studio結合一個在線工具網站快速實現了這個功能. 

1. 打開Spider Studio, 加載頁面 http://www.utilities-online.info/xmltojson/

2. 通過選擇頁面元素功能找到xml和json兩個輸入框以及兩個相互轉換的按鈕, 他們的ID分別為: #json, #xml, #tojson, #toxml.

3. 編寫腳本自動完成頁面操作:

public void Run()
{
    Logger.ClearAll();
    Logger.Log(Xml2Json("<person><name>Mike</name><age>30</age></person>"));
    Logger.Log(Json2Xml("{'person':{'name':'Mike', 'age':30}}"));
}

public string Xml2Json(string xml)
{
    lock(this)
    {
        Default.Navigate("http://www.utilities-online.info/xmltojson");
        Default.Ready();
        Default.SelectSingleNode("#xml").Text(xml);
        Default.SelectSingleNode("#tojson").Click();
        var json = Default.SelectSingleNode("#json").Text();
        return json;
    }
}

public string Json2Xml(string json)
{
    lock(this)
    {
        Default.Navigate("http://www.utilities-online.info/xmltojson");
        Default.Ready();
        Default.SelectSingleNode("#json").Text(json);
        Default.SelectSingleNode("#toxml").Click();
        var xml = Default.SelectSingleNode("#xml").Text();
        return xml;
    }
}
View Code

測試效果:

4. 通過一點小技巧提高性能

經過觀察發現這個網站打開比較慢, 但是一旦打開之后, 處理轉換還是挺快的. 因此我決定只在最開始打開一次, 之后直接調用轉換功能就成了.

將代碼

Default.Navigate("http://www.utilities-online.info/xmltojson");
Default.Ready();

 

改成

if(Default.Url.ToString() != "http://www.utilities-online.info/xmltojson/")
{
    Default.Navigate("http://www.utilities-online.info/xmltojson");
    Default.Ready();
}

 

即可, 測試發現原來需要4s的加載過程現在秒出了 :)

5. 將腳本編譯成DLL

6. 創建WinForm程序, 引入DLL

7. 運行起來的效果

 8. 和Spider Studio采集以及相關腳本編寫的其他文章:

C#代碼獲取或設置Iframe中的HTML

示例 - C#腳本代碼采集搜狐NBA球員, 球隊和比賽實況

C#中利用JQuery實現視頻網站的縮略圖采集

API - 使用Default對象 - 基礎篇

示例 - 如何翻頁

示例 - 向百度說 Hello world! 並獲得回應.

Spider Studio 社區信息

 


免責聲明!

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



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