【利用静态网站传输数据】

前一阵子在弄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

相关文章
相关标签/搜索