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 社区信息

 

posted @ 2013-12-25 23:30  Ivan Zou  阅读(3177)  评论(7编辑  收藏  举报