预览模式: 普通 | 列表

C#和.NET中数据交换格式之JSON

本文来源于周公先生(有待确认),这里感谢他。我留档一下。

我们知道在.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类。
为了便于下面的演示,下面提供一个类的代码:
 

 
  1. [DataContract]  
  2. public class User  
  3. {  
  4.     /// <summary>   
  5.     /// 编号   
  6.     /// </summary>   
  7.     [DataMember]  
  8.     public int UserId { getset; }  
  9.     /// <summary>   
  10.     /// 用户名   
  11.     /// </summary>   
  12.     [DataMember]  
  13.     public string UserName { getset; }  
  14.     /// <summary>   
  15.     /// 创建时间   
  16.     /// </summary>   
  17.     [DataMember]  
  18.     [JsonConverter(typeof(IsoDateTimeConverter))]  
  19.     public DateTime CreateDate { getset; }  
  20.     /// <summary>   
  21.     /// 生日   
  22.     /// </summary>   
  23.     [DataMember]  
  24.     [JsonConverter(typeof(JavascriptDateTimeConverter))]  
  25.     public DateTime Birthday { getset; }  
  26.     /// <summary>   
  27.     /// 相关URL   
  28.     /// </summary>   
  29.     [DataMember]  
  30.     public List<string> Urls { getset; }  
  31.     /// <summary>   
  32.     /// 薪水   
  33.     /// </summary>   
  34.     //[ScriptIgnore]//使用JavascriptSerializer序列化时不序列化此字段   
  35.     //[IgnoreDataMember]//使用DataContractJsonSerializer序列化时不序列化此字段   
  36.     //[JsonIgnore]//使用JsonConvert序列化时不序列化此字段   
  37.     public int Salary { getset; }  
  38.     /// <summary>   
  39.     /// 权利级别   
  40.     /// </summary>   
  41.     [DataMember]  
  42.     public Priority Priority { getset; }  
  43.   
  44.     public User()  
  45.     {  
  46.         Urls = new List<string>();  
  47.     }  
  48. }  
  49. /// <summary>   
  50. /// 权利级别   
  51. /// </summary>   
  52. public enum Priority:byte  
  53. {  
  54.     Lowest=0x1,  
  55.     BelowNormal=0x2,  
  56.     Normal=0x4,  
  57.     AboveNormal=0x8,  
  58.     Highest=0x16  
  59. }  

 

查看更多...

Tags: 数据交换 json 序列化

分类:.Net开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 404

在使用ibatis插入数据进数据库的时候,关键ID是sequence生成的,需要获取插入的这个ID的值有时候很麻烦,下面根据自增sequence,获取ID最大值的方法:
<insert id="InsertResultToDB"  resultClass="NetResult" parameterClass="NetResult">
      insert into Spider_Result(
      <include refid="SelectOnlyFieldsResult"></include>

查看更多...

Tags: ibatis ins&#101;rt sel&#101;ctKey

分类:.Net开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 762
   来自欧洲服务器的一位魔法师玩家,在单人游戏情况下,率先完成了对炼狱难度最终BOSS暗黑破坏神的击杀,恭喜他!不知道一直在强调炼狱难度的暴雪在得知这一消息后会有怎样的解释,四天时间,玩家就已经完成了之前被认为不可能完成的任务!

之前一直备受瞩目的method公会并未如愿拿到这个重量级首杀,希望他们能在专家模式下有更好的表现!

查看更多...

Tags: 暗黑3 暗黑破坏神 法师

分类:娱乐爱好 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 261

近段时间开发中需要CRC32校验,目前就采取C#写了一个简单的。

需要安装:.Net Framework 4 Client Profile

请自行到微软官网下载,谢谢!

 

查看更多...

Tags: crc32 校验码 C#

分类:.Net开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 832

在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"
 />

查看更多...

Tags: ibatisnet o&amp;#114;acle DataAccess win7

分类:.Net开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1282

与C++不同,C#语言禁止在创建某个控件的线程外对控件进行访问,否则会引起访问违规的异常。但有些时候,我们的确需要从其他线程对控件,此时就需要借助于Invoke和BeginInvoke之手了。我们先来对Invoke进行介绍。

Invoke是控件Control的成员方法,函数有两个重载版本:

Invoke(Delegate) 在拥有此控件的基础窗口句柄的线程上执行指定的委托。
Invoke(Delegate, object[]) 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。

第一个版本用于Invoke不带参数的委托,第二个版本用于Invoke带参数的委托,没有实质的区别。

查看更多...

Tags: Invoke BeginInvoke Delegate 线程 委托

分类:.Net开发 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1049
概述
在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式。

意图
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

查看更多...

Tags: 适配器模式 Adapter Pattern 设计模式

分类:开发文档 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 155
概述

在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化?

意图

查看更多...

Tags: 原型模式 Prototype Pattern 设计模式

分类:开发文档 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 160