【利用靜態網站傳輸數據】

前一陣子在弄github的網站,發如今github上能夠免費的創建一整套靜態網站。html

而最近在弄一些我的的小軟件,然而軟件是須要不斷改進的,但是我又沒有我的服務器,那怎麼辦?git

這個時候我想到了github。github

因爲github是一個靜態網站,同時也是一個免費的雲盤,能夠在上面存任何的東西,因而我就想能不能把最新的版本信息存在github上面,而後經過網頁的方式訪問指定的網頁從而獲取最新的版本號和下載地址?服務器

通過一番小小的折騰,初步的模板已經完成:工具

 

基本流程是經過xml記錄版本號和下載地址-》上傳到github上-》再在客戶端經過網頁讀取xml信息-》把xml信息在本地解析成相應的類,從而得到信息。測試

 

首先是一個開源的.net  xml生成解析類,這是我在網上找到的一個開源的工具,本身稍微修改了一下,若是原做者不想再這裏公開,能夠聯繫我。網站

這個xml相似經過.net的序列化來生成xml的,簡單方便快捷。因此就一直沿用了;spa

/* 2015.12.28 BobDong
 * 生成xml文件,記錄生成的表名
 */

using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace 模擬網站登陸
{
    class XmlHelper
    {
        #region 序列化操做
        /// <summary>
        /// 序列化對象
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="o"></param>
        /// <param name="encoding"></param>
        private static void XmlSerializeInternal(Stream stream, object o, Encoding encoding)
        {
            if (o == null)
                throw new ArgumentNullException("o");
            if (encoding == null)
                throw new ArgumentNullException("encoding");

            XmlSerializer serializer = new XmlSerializer(o.GetType());

            XmlWriterSettings settings = new XmlWriterSettings
            {
                Indent = true,
                NewLineChars = "\r\n",
                Encoding = encoding,
                IndentChars = "    "
            };

            using (XmlWriter writer = XmlWriter.Create(stream, settings))
            {
                serializer.Serialize(writer, o);
                writer.Close();
            }
        }

        /// <summary>
        /// 將一個對象序列化爲XML字符串
        /// </summary>
        /// <param name="o">要序列化的對象</param>
        /// <returns>序列化產生的XML字符串</returns>
        public static string XmlSerialize(object o)
        {
            try
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    XmlSerializeInternal(stream, o, Encoding.UTF8);
                    stream.Position = 0;
                    using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                    {
                        return reader.ReadToEnd();
                    }
                }
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 以【Encoding.UTF8】反序列化xml
        /// </summary>
        /// <typeparam name="T">結果對象類型</typeparam>
        /// <param name="s">包含對象的XML字符串</param>
        /// <returns>反序列化獲得的對象</returns>
        public static T XmlDeserialize<T>(string s)
        {
            if (string.IsNullOrEmpty(s))
                throw new ArgumentNullException("s");
            XmlSerializer mySerializer = new XmlSerializer(typeof(T));
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(s)))
            {
                using (StreamReader sr = new StreamReader(ms, Encoding.UTF8))
                {
                    return (T)mySerializer.Deserialize(sr);
                }
            }
        }

        #endregion


    }
}

  

接着是讀取網頁代碼的類,【log模塊被我刪掉了,須要的能夠在相應的位置加上日誌】.net

using System;
using System.IO;
using System.Net;
using System.Text;

namespace 模擬網站登陸
{
    public static class WebData 
    {
        public static T LoadData<T>(string path,Encoding encoding)
        {
            WebRequest request = WebRequest.Create(path);//實例化WebRequest對象
            WebResponse response = request.GetResponse();//建立WebResponse對象
            Stream datastream = response.GetResponseStream();//建立流對象
            T resoult=default(T);
            if (datastream == null)
            {
                return resoult;
            }
            StreamReader reader = new StreamReader(datastream, encoding);
            string responseFromServer = reader.ReadToEnd();//讀取數據
            reader.Close();
            datastream.Close();
            response.Close();
            try
            {
                return XmlHelper.XmlDeserialize<T>(responseFromServer);
            }
            catch(Exception ex)
            {
                return resoult;
            }
        }

    }
}

  

來一個最簡單的demo日誌

這個是一個經過序列化獲得的xml文件

<?xml version="1.0" encoding="utf-8"?>
<string>1</string>

 

同時附上個人github測試地址:「http://www.bobdong.cn/Software/CodeTest/Test.txt」

        private string Load()
        {
            return WebData.LoadData<string>("http://www.bobdong.cn/Software/CodeTest/Test.txt", Encoding.UTF8);
        }

  

讀出來的數據就是一個字符串了;

【ps:demo只是一個簡單的例子,因此只放了一個string,其實也能夠存放複雜類型的】

歡迎廣大園友雅批指正

welcome to my page:www.bobdong.cn

相關文章
相關標籤/搜索