posts - 5,  comments - 1,  trackbacks - 0
公告
  2012年3月4日

json全称是JavaScript Object Notation。它是基于JavaScript的一种轻量级的数据交换。根据名称就是知道,json最大的用途就是在js程序中用来表示 数据结构,数据对象。

 

有2种方式来得到json对象。

 

一. 直接申明

 

var  json = { name:’’,sex:’’};

 

   第一种就不做说明了。

二. 解析字符串

 

  这种方式,最常用在通过解析从ajax方法返回的字符串,来生成客户端json对象。这些方法网上也是很多,但是还是做个罗列

 

  2.1 eval 法

    优点 :简单且对字符串要求不是那么严格

    缺点 :会被注入

 

   原生性支持不需要别的模块支持

   var json = eval(“(”+jsonStr+”)”);

  

2.2  jQuery

    在jQuery的ajax中,直接可以将数据格式返回成 json

   其实前面2种都是调用最后一个方法来解析的。

 

2.3 json.js

  下载json官网提供的解析模块 http://www.json.org/json.js,如下调用,即可解析出json对象

myData = JSON.parse(text, function (key, value) {
    var type;
    if (value && typeof value === 'object') {
        type = value.type;
        if (typeof type === 'string' && typeof window[type] === 'function') {
            return new (window[type])(value);
        }
    }
    return value;
});

第二个参数是,解析每个节点元素后的回调。

 

上面是从ajax获取字符串后解析生成对象。那么 服务器上是要怎么将对象生成的json字符串呢,比较json是javascript才有的

在asp.net中同样有几种方式来生成.

1.纯手工生成,拼接字符串。

 

2. net35后,给我们提供了2种方法解析

using System.Runtime.Serialization.Json;

DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
using (MemoryStream ms = new MemoryStream()){
      serializer.WriteObject(ms, item);
      StringBuilder sb = new StringBuilder();
      sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
      return sb.ToString();
}
这个解析方式,没有办法解析匿名类型。如果要解析匿名类型就要使用另外一种
 
(new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(new
       {
           result = i > 0,
           message = “”,
           bdyzid = “”
       });
3.通过一些著名的框架解析 例如Newtonsoft.Json
posted @ 2012-03-04 20:48 ksh.xy 阅读(14) 评论(0) 编辑
  2012年2月28日

在.net安装winform程序一般有3种方式 (本文都是基于只有几台服务器,不考虑自动化的情况下进行的)。

  1.    VS安装项目
  2.    clickone
  3.    自定义的在线升级组件

 

每种都有自己的优劣势,和适用的范围。因为工作项目的需求开发了一个winform的小程序运行在2,3台64位win2008的服务器。

 

所以本文也就只介绍第一种也就是64位VS安装项目的安装包制作过程。以及后续的更新包制作过程。

 

制作.net的setup安装包

 

首先,点击新建项目—>选择[其他项目类型]—>选择[安装和部署]—>选择[Visual Studio Installer]

                -->选择([安装项目]或[安装向导]),如下图:

11

 

然后,这步就是在 “应用程序文件”,”桌面“等文件夹中添加你的EXE DLL等文件。这里就不细写了。

 

*你的exe需要编译成64位的,选择winform项目右键属性—>生成—>选择目标平台“x64”

 image

而dll是不需要编译成64位,只要选择成any cpu即可

 

而后,如果你的exe是64位,但是安装项目还是基于x86的。在生成时就会出现如下的提示

"XX项目的目标平台“x86”不兼容 ",所以这里我们需要将安装项目中的属性修改为基于64位的。需要注意这里的选择属性相当的坑爹。

【属性】,不是指右键项目的属性,如果是你这样选择你将看不到任何关于64位的信息。

先打开这里的属性窗口是[菜单栏—>视图—>属性窗口],点击你的项目。这时候属性窗口中有个targetplatform属性选择为x64位就行了。

捕获

这时候再编译就能生成基于64位的安装包了,在64位的服务器下程序也就会按64位的模式运行了。

 

更新包制作

当你修改了程序,就要涉及程序怎么更新到现场服务器上,我一般用这几种方式

  1. 手工复制粘贴
  2. 使用安装项目
  3. 使用winrar制作exe文件

这里说下2,3种类型更新方式

 

使用安装项目。

这个方式很简单,就是使用上面那个制作安装包的项目。

步骤也就只有一个步,只要修改下上图中的”Version”和”UpgradeCode”(ProductCode会自动更新),然后重新编译。

使用新生成的安装包,重新安装下就行了。

但是这种方式有种弊端,就是会在 windows的卸载功能中,出现多个 该软件的安装记录如下图

捕获

 

使用winrar制作exe更新包

使用winrar可以很方便的制作出一个自解压exe更新包,及环保又绿色只是略微山寨了点

右键选择你需要更新的文件,添加到 rar文件

然后如下图: 关键是选中 【创建自解压格式压缩文件】

捕获1

 

同时,还可以设置你程序的安装默认路径, 点击【高级】—>【自解压选项】—>填写解压路径 就是使用exe时的默认路径。

posted @ 2012-02-28 21:31 ksh.xy 阅读(90) 评论(0) 编辑

   本文并不是javascript教程或是说教类文章,纯粹是个人记录自己工作中使用js的一些心得。

 

    在《javascript权威指南》中说到,js中一切皆为对象。那我们总结下 一共有哪些对象,并且都要怎么定义他们,怎么使用他们,怎么扩展他们。

 

  1. 定义对象

    首先我们需要知道,我们要怎么定义他们。

  

   1.1    现在最火的json对象:用在方便同ajax交互下. 

       var json = {"name":"hc","sex":"1"};
       //使用
       alert(json.name+" "+json.sex); 

     为什么json会这么火呢?因为在我没有接触json前.通过ajax返回数据,解析文本串,是通过”|”来的. 例如:  

       var strResult = ajax.responseText;

     //ajax.responseTex为假设存放ajax返回文本.  1|id=’fffff’|name=’ccc’   如果我要获取name  我就需要   var attr = strResult.split(‘|' )[2];   这样既不直观也不面向对象。所以 当我接触了json后。一下就替换到字符串分割的这种做法了.    

 

同时顺带说题外话,json字符串格式要求也比较松散 .上面的 var json={“name”} 的 name,可以使用双引号,单引号,甚至不用引号都可以。但是如果你使用jQuery等外带框架来进行解析的时候,则必须带上双引号。如果你使用最松散的方式来解析的话 var json = eval("(“+str+”)”);//这样要求最小,但是容易被注入。

   1.2   最原生的对象 :  object

 

 var obj  = new Object();
 //等价的json申明方式就是 
 var obj = {}; 
 //所以在各大js框架中,基本上看不到new Object()这种写法,都是 obj = {}的写法;简单明了

 

1.3   最像类的对象: function

 function User(name,sex){
     //这样是申明类的属性

     this.name=name;

     this.sex = sex;
  
     //这样是申明类的公共方法
    this.getMyFullName=function(){
	 return _firstname+this.name;
     }
    
    //这个是定义类的私有变量
    var _name= name;
    var _firstname="黄";    
  
    //这个是定义类的私有方法
    function getSex(){
    }
 }
定义好一个类,接下来就是实例他的。和C#一样,通过new 类来实例化他
 
 var my = new User("hc","1");
 alert(my.name);
 alert(my.getMyFullName());
 

2.扩展对象

 在各个js框架中基本都是这么几种方式来定义对象。我们知道怎么定义对象后。就需要知道怎么扩展他们。
 
 要扩展对象,无非分为2种 ,一种是扩展整个类,一种就是只扩展某个类的实例化
 
 
 2.1 prototype 属性
     
   prototype 属性就是javascript用来满足我们扩展整个类 这个需求而产生的。
   prototype 定义是 该属性指向当前对象所指向的原型。
   光说定义和概念肯定不好理解,打个比方。如果你有需求想要在所有字符串或者数组上加一个方法,你要找谁?
微软才不会给你加个方法。所以这时候 prototype派上用场了.
 String.prototype.getTempMethod = function () {
            return "hc";
}
var str = "c";
alert(str.getTempMethod());//这样在string中你就拥有的你自己的专属方法
 
 2.2 私有扩展
 
如果你只想你当前对象扩展一个方法,那么非常的简单,因为在js中所有方法,字段都是属性。即使是不存在属性方法也可以直接使用
只是它的值为undefined
 
    
  //这时候alert的方法是undefined
  var obj = {};
  //这时候就在这个对象上定义了一个alert方法了
  obj.alert = function(){{
  }

   
 
    
posted @ 2012-02-28 00:06 ksh.xy 阅读(123) 评论(0) 编辑
  2012年2月27日

 

  这4个属性(以及这几个衍生的属性)几乎所有HTML动画都和这几个属性或者与有关。

 

   我们先列出这些属性和这样相关的属性

 

    width height  top left   相关属性 position

   

   offset系列

      offsetWidth   offsetHeight  offsetTop  offsetLeft  相关属性 offsetParent

 

   scroll 系列

      scrollWidth   scrolltHeight  scrollTop scrollLeft

 

   client 系列

      clientWidth  clientHeight  clientTop clientLeft

 

   style.width :   在没有显示设置width的时候,这个值是等于””并没有办法获取到实际的宽度

   style.height:   同width,没有显式设置时是空的。

                          那为什么还要有这2个属性,关键在于他们是 可读写的.下面几个属性都是 只读的.

 

   offsetWidth :  dom元素的实际宽度,但是没有显示的部分(需要滚动条滚动后显示的部分)

                 如果元素的display不为“none”的话,使用这个属性就行

   offsetHeight:  dom元素的实际高度,包含没有显示的部分(需要滚动条滚动后显示的部分)

                如果元素的display不为“none”的话,使用这个属性就行

   scorllWidth  :  dom元素的全部宽度,包含没有显示的部分

   scrolltHeight : dom元素的高度

                          IE9下是只表示  显示的高度+上下2个滚动条的高度

                          chrome 下表是 实际内部的高度。

 

    clientHeight: 可视区域高度

                       :如果元素的 display为不可见话的.可以先把该元素的 设置为可见,然后通过使用该属性获取 高度

                          最后再将元素设置为原来的属性即可。

    clientWidth : 可视区域宽度

 

 

   top :  距离上级元素的x距离

   left :距离上级元素的y距离

   如果要元素实际的top 必须要通过offsetTop来计算,left也是同样要通过offsetLeft来计算

   最经典的计算位置代码 (Top)同这个一样

   function getLeft(elem){

          return elem.offsetParent?

                     elem.offsetLeft+getLeft(elem.offsetParent):

                     elem.offsetLeft;
   }

  

   下图是网上找到IE6下的各个属性的代表。FF和chrome有可能不同。

  200688125739152

posted @ 2012-02-27 23:05 ksh.xy 阅读(65) 评论(0) 编辑
  2011年12月29日

      因为公司使用Team Foundation Server来管理源代码但有时候需要一些小功能但是VS2010并未提供所以只能通过二次开发来实现一些特定的功能。本文就是通过介绍通过调用TFS2010API来进行一些简单的二次开发。

   开发前的准备:

           VS2010+TFS2010SDK(在安装TFS2010时自动就注册成全局的Assembly)

           在项目中添加引用 TFS2010的SDK,在项目上右键添加引用—>.Net 选项卡—>添加以下3个引用

   Microsoft.TeamFoundation
   Microsoft.TeamFoundation.Client
   Microsoft.TeamFoundation.VersionControl.Client

如果在添加引用时未发现这3个选择项,很有可能是该 项目属性中—>目标框架 不是.NET Framework 4。

其实如果没有装TFS2010或者.net 4.0的只是添加引用对应版本的TFS SDK即可,例如.net可以选择安装D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\ 下的对应dll即可。

  二次开发之登录:

        二次开发操作就如同在VS中一样需要先登录后才能进行各种操作例如 获取签出文件,签入,获取最新版本等等。

        登录的SDK非常简单。

  //    端口号一般默认都是8080
  string tfsName = "http://***.***.***.***:8080";
  Microsoft.TeamFoundation.Client.TeamFoundationServer tfs =new Microsoft.TeamFoundation.Client.TeamFoundationServer(tfsName, new System.Net.NetworkCredential(“用户名", "密码", tfsName)
);

 

二次开发之获取当前签出项:

        由于TFS包含了BUG管理,报表,源代码管理等各种功能,所以在SDK中则各种功能体现在对应名称的DLL和类中。首先想要使用源代码管理功能,则需要先从刚才定义变量中获取源代码管理服务。代码如下

    

VersionControlServer versionControl =
   (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

 

获取源代码管理功能后,我们调用

ItemSpec[] itemSpecs = new ItemSpec[1];
itemSpecs[0] = new ItemSpec(@"$/{这里包含TFS根目录下的根路径}/",RecursionType.Full);
PendingSet[] pendingSet =versionControl.QueryPendingSets(itemSpecs,"工作区名称",
                         "用户名",true);

  到这里我们就能获取到,你所指定的用户所在工作区中所有签出的文件。

 

二次开发之根据变更集获取文件路径


根据变更集获取文件,同获取签出项时的操作几乎一样,这里就不一一说明了
    首先,登录TFS
    其次,获取源代码管理功能
    然后调用
Changeset s = versionControl.GetChangeset(num, includeDownloadInfo, includeDownloadInfo);
即可获取,指定变更集中所有的文件,只有TFS路径,病人你签入时的本地路径。

 

二次开发之获取最新版本

 

首先,登录TFS
其次,获取源代码管理功能
然后,获取要获取路径的所在工作区

 

Microsoft.TeamFoundation.VersionControl.Client.Workspace ws = versionControl.GetWorkspace("工作区名称", versionControl.AuthenticatedUser);
 //最后,调用下载文件函数进行下载
 Item item = versionControl.GetItem("$/CRDS3/ClassReflection.cs");
 item.DownloadFile(ws.GetLocalItemForServerItem(item.ServerItem));


由于DownloadFile相当的坑爹即使是下载失败,也不会抛出任何异常。所以建议在下载后,加上检测文件最后修改,或者判断文件是否生成来确定是否下载成功过。

结尾:

 

  TFS二次开发可以说没有什么技术难度,唯一难度就是资料太少了我们无法得知该调用什么API来进行对应的操作。
以下是在进行这次二次开发时,主要的代码参考来源
http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx
最后付上源代码,使用时把TFSHandlercs.cs文件中GetTFSConfig()函数中的一些初始参数修改成你自己的对应的参数。

posted @ 2011-12-29 20:16 ksh.xy 阅读(378) 评论(1) 编辑
仅列出标题