VC 中CAsyncSocket的OnClose方法
作者:admin 日期:2012-06-07
C#和.NET中数据交换格式之JSON
作者:admin 日期:2012-05-27
本文来源于周公先生(有待确认),这里感谢他。我留档一下。
我们知道在.NET中我们有多种对象序列化的方式,如XML方式序列化、Binary序列化,其中XML序列化是一种比较通用的在各语言之间传递数据的方式。除了这两种序列化方式之外,在.NET中还可以使用JSON序列化。
JSON(Javascript Object Notation)是一种轻量级轻量级的数据交换格式,并且它独立于编程语言,与XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后数据体积小,所以在Facebook等知名网站中都采用了JSON作为数据交换方式。在.NET中有三种常用的JSON序列化的类,分别是System.Web.Script.Serialization.JavascriptSerializer类、System.Runtime.Serialization.Json.DataContractJsonSerializer类和Newtonsoft.Json.JsonConvert类。
为了便于下面的演示,下面提供一个类的代码:
- [DataContract]
- public class User
- {
- /// <summary>
- /// 编号
- /// </summary>
- [DataMember]
- public int UserId { get; set; }
- /// <summary>
- /// 用户名
- /// </summary>
- [DataMember]
- public string UserName { get; set; }
- /// <summary>
- /// 创建时间
- /// </summary>
- [DataMember]
- [JsonConverter(typeof(IsoDateTimeConverter))]
- public DateTime CreateDate { get; set; }
- /// <summary>
- /// 生日
- /// </summary>
- [DataMember]
- [JsonConverter(typeof(JavascriptDateTimeConverter))]
- public DateTime Birthday { get; set; }
- /// <summary>
- /// 相关URL
- /// </summary>
- [DataMember]
- public List<string> Urls { get; set; }
- /// <summary>
- /// 薪水
- /// </summary>
- //[ScriptIgnore]//使用JavascriptSerializer序列化时不序列化此字段
- //[IgnoreDataMember]//使用DataContractJsonSerializer序列化时不序列化此字段
- //[JsonIgnore]//使用JsonConvert序列化时不序列化此字段
- public int Salary { get; set; }
- /// <summary>
- /// 权利级别
- /// </summary>
- [DataMember]
- public Priority Priority { get; set; }
- public User()
- {
- Urls = new List<string>();
- }
- }
- /// <summary>
- /// 权利级别
- /// </summary>
- public enum Priority:byte
- {
- Lowest=0x1,
- BelowNormal=0x2,
- Normal=0x4,
- AboveNormal=0x8,
- Highest=0x16
- }
ibatis.net 插入(insert)返回关键字Key的值(selectKey用法)
作者:admin 日期:2012-05-24
暗黑3快速记录:丹麦法师世界第一炼狱通关-大菠萝已死
作者:admin 日期:2012-05-21
crc32校验码验证器,C#编写的,简单易用!
作者:admin 日期:2012-05-15
ibatis.net在win7 64位环境下加载Oracle.DataAccess.dll 失败的问
作者:admin 日期:2012-05-14
在win7 64位操作系统环境下采取ibatis.net访问oracle数据库运行时候运行报错:未能加载文件或程序集“Oracle.DataAccess, Version=2.111.6.20, Culture=neutral, PublicKeyToken=89b483f429c47342”或它的某一个依赖项
由于IBatis.net是动态加载,所以只有到运行时候报错。
providers.config文件中配置编写如下:
<provider
name="oracle11.1"
description="Oracle, oracle provider V2.102.2.20"
enabled="true"
assemblyName="Oracle.DataAccess, Version=2.111.6.20, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection"
commandClass="Oracle.DataAccess.Client.OracleCommand"
parameterClass="Oracle.DataAccess.Client.OracleParameter"
parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"
parameterDbTypeProperty="OracleDbType"
dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"
commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"
usePositionalParameters="false"
useParameterPrefixInSql="false"
useParameterPrefixInParameter="false"
parameterPrefix=":"
useDeriveParameters="false"
allowMARS="false"
/>
C#&.Net中控件的Invoke、BeginInvoke及其实现原理分析
作者:admin 日期:2012-05-13
与C++不同,C#语言禁止在创建某个控件的线程外对控件进行访问,否则会引起访问违规的异常。但有些时候,我们的确需要从其他线程对控件,此时就需要借助于Invoke和BeginInvoke之手了。我们先来对Invoke进行介绍。
Invoke是控件Control的成员方法,函数有两个重载版本:
Invoke(Delegate) 在拥有此控件的基础窗口句柄的线程上执行指定的委托。
Invoke(Delegate, object[]) 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。
第一个版本用于Invoke不带参数的委托,第二个版本用于Invoke带参数的委托,没有实质的区别。