<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_豆浆咖啡</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/66254/rss</id><updated>2012-05-28T11:06:24Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/66254/rss"/><entry><id>http://www.cnblogs.com/cracker/archive/2012/05/28/windowsphone_xapedit.html</id><title type="text">Windows Phone开发经验谈(6)-XAP安装包的修改</title><summary type="text">不知道大家会不会遇到下面这个场景...程序已经编译好了并做了些特殊处理,准备发布到marketplace了...但是这时候发现有一些小细节要修改..如程序图标有些阴影没处理好要修改...游戏没设置成安装在xbox live里...诸如此类....但是这时候又懒得重新打开编译后再做特殊处理...这里教大家如何直接修改xap包...完成所有不需要重新编译就能达到的效果。大家知道WindowsPhone的应用程序支持3种安装位置，分别是程序页、Xbox、设置菜单；在程序页显示模式有2种，分别是普通程序页的小图标模式以及大图标模式2种，下面我以我的app公交路线查询作为例子,给大家演示下:/首先用解.</summary><published>2012-05-28T11:06:00Z</published><updated>2012-05-28T11:06:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2012/05/28/windowsphone_xapedit.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2012/05/28/windowsphone_xapedit.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp; 不知道大家会不会遇到下面这个场景...程序已经编译好了并做了些特殊处理,准备发布到marketplace了...但是这时候发现有一些小细节要修改..如程序图标有些阴影没处理好要修改...游戏没设置成安装在xbox live里...诸如此类....但是这时候又懒得重新打开编译后再做特殊处理...这里教大家如何直接修改xap包...完成所有不需要重新编译就能达到的效果。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;大家知道WindowsPhone的应用程序支持3种安装位置，分别是程序页、Xbox、设置菜单；在程序页显示模式有2种，分别是普通程序页的小图标模式以及大图标模式2种，下面我以我的app公交路线查询作为例子,给大家演示下:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="display: none;"&gt;/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;首先用解压缩软件打开chinabus.xap文件即可看到ApplicationIcon.png、Background.png、SplashScreenImage.jpg、WMAppManifest.xml 4个文件，如图：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/112775/2012052818491691.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;ApplicationIcon.png、Background.png是app的小图标和固定到主屏的大图标（分辨率是62x62和173x173),文件名不一定就是这2个具体要看你的xap有没有自定义设置；SplashScreenImage.jpg是app进入的第一屏(分辨率是480x800),WMAppManifest.xml，是程序名，安装位置和显示模式控制，可以用记事本打开修改，修改后保存txt，在保存xap即可，如图&lt;br /&gt;1、修改图标或主屏:就是用同文件名、同分辨率同格式的图片，在解压缩软件里直接拖动在xap里，然后替换保存即可。&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、修改程序名:WMAppManifest.xml在记事本打开，会看到开头一段，Title="公交路线查询" 这里你可以修改任意你想要的名字，中英文都可以，但注意有些改了中文会安装错误，如图&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/112775/2012052818590455.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;3、安装多个相同程序便于测试...我想这不用我说了把只要把WMAppManifest.xml里的ProductID修改成别的GUID就行了...&lt;/p&gt;&lt;p&gt;4、把程序安装在设置菜单..WMAppManifest.xml在记事本打开，在里面最后面在加上 HubType="268435456"，就可以安装在设置菜单里了。&lt;/p&gt;&lt;p&gt;5、想在主屏显示程序的大图..而不是默认的小图的话，WMAppManifest.xml在记事本打开，会看到最后面一段有&amp;lt;TemplateType5&amp;gt;的语句，这就是图标显示模式，如果需要大图标模式把他修改为&amp;lt;TemplateType6&amp;gt;即可，注意：大图标分辨率是365x173 如图)&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/112775/2012052819043156.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;好了...以上就是不用重新编译xap..用记事本和解压缩软件就能简单的修改xap包了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2522192.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2012/05/28/windowsphone_xapedit.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cracker/archive/2012/05/17/2506733.html</id><title type="text">获取客户端IP、端口号示例(C#)</title><summary type="text">using System;using System.Collections.Generic;using System.Text;using System.Net;//为了IPEndPoint而添加的引用using System.Net.Sockets;namespace GetClntIP{ class Program { static void Main(string[] args) { TcpListener tcpListener = new TcpListener(9000);//监听的端口号，可根据需要修改 ...</summary><published>2012-05-17T11:10:00Z</published><updated>2012-05-17T11:10:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2012/05/17/2506733.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2012/05/17/2506733.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Text;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Net;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;为了IPEndPoint而添加的引用&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Net.Sockets;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetClntIP&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Program&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] args)&lt;br/&gt;        {&lt;br/&gt;            TcpListener tcpListener &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; TcpListener(&lt;span style="color: #800080;"&gt;9000&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;监听的端口号，可根据需要修改&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            tcpListener.Start();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;loop for listen&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                Socket sock &lt;/span&gt;=&lt;span style="color: #000000;"&gt; tcpListener.AcceptSocket();&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;服务器当前时间&lt;/span&gt;&lt;br/&gt;                DateTime connTime =&lt;span style="color: #000000;"&gt; DateTime.Now;&lt;br/&gt;                Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;The time is :&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;+&lt;span style="color: #000000;"&gt;connTime.ToString());&lt;br/&gt;&lt;br/&gt;                System.Net.IPAddress ipAdd;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; port;&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得连接当前用户的IP以及端口号&lt;/span&gt;&lt;br/&gt;                ipAdd = (sock.RemoteEndPoint &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; IPEndPoint).Address;&lt;br/&gt;                port &lt;/span&gt;= (sock.RemoteEndPoint &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; IPEndPoint).Port;&lt;br/&gt;&lt;br/&gt;                Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;The client IP :&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;+&lt;span style="color: #000000;"&gt;ipAdd.ToString ());&lt;br/&gt;                Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;The client port :&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; +&lt;span style="color: #000000;"&gt; port.ToString());&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            tcpListener.Stop();&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;[附]获取本地IP：&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得本地局域网IP地址&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;IPAddress [] AddressList&lt;/span&gt;=&lt;span style="color: #000000;"&gt;Dns.GetHostByName(Dns.GetHostName()).AddressList;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(AddressList.Length&amp;lt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;       retern &lt;/span&gt;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;retern AddressList[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].ToString();&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;注意这里数组参数为0&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得拨号动态分配IP地址&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;IPAdress [] AddressList&lt;/span&gt;=&lt;span style="color: #000000;"&gt;Dns.GetHostByName(Dns.GetHostName()).AddressList;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(AddressList.Length&amp;lt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; AddressList[&lt;span style="color: #800080;"&gt;1&lt;/span&gt;].ToString();&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;注意这里数组参数为1&lt;/span&gt;&lt;br/&gt; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2506733.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2012/05/17/2506733.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cracker/archive/2012/05/17/windowsphone_json.html</id><title type="text">Windows Phone开发经验谈(5)-Json的序列化和反序列化</title><summary type="text">wp7默认是支持序列化的..但是在这里给大家推荐一个类库Newtonsoft.Json，现在叫Json.net 下载地址：http://json.codeplex.com/releases/view/87440 序列化的例子：Product product = new Product();product.Name = "Apple";product.Expiry = new DateTime(2008, 12, 28);product.Price = 3.99M;product.Sizes = new string[] { "Small", "</summary><published>2012-05-17T08:45:00Z</published><updated>2012-05-17T08:45:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2012/05/17/windowsphone_json.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2012/05/17/windowsphone_json.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; wp7默认是支持序列化的..但是在这里给大家推荐一个类库Newtonsoft.Json，现在叫Json.net 下载地址：&lt;a href="http://json.codeplex.com/releases/view/87440"&gt;http://json.codeplex.com/releases/view/87440&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 序列化的例子：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Product product = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Product();&lt;br/&gt;product.Name &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Apple&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;product.Expiry &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DateTime(&lt;span style="color: #800080;"&gt;2008&lt;/span&gt;, &lt;span style="color: #800080;"&gt;12&lt;/span&gt;, &lt;span style="color: #800080;"&gt;28&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;product.Price &lt;/span&gt;= &lt;span style="color: #800080;"&gt;3.99M&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;product.Sizes &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] { &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Small&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Medium&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Large&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; };&lt;br/&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; json = JsonConvert.SerializeObject(product);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;  "Name": "Apple",&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;  "Expiry": new Date(1230422400000),&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;  "Price": 3.99,&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;  "Sizes": [&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    "Small",&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    "Medium",&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;    "Large"&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;  ]&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;} Product deserializedProduct = JsonConvert.DeserializeObject&amp;lt;Product&amp;gt;(json);&lt;/span&gt;&lt;br/&gt;&lt;br/&gt; &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Linq to json的例子&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; json = &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{  ""Name"": ""Apple"",  ""Expiry"": new Date(1230422400000),  ""Price"": 3.99,  ""Sizes"": [    ""Small"",    ""Medium"",    ""Large""  ]}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;br/&gt;JObject o &lt;/span&gt;=&lt;span style="color: #000000;"&gt; JObject.Parse(json);&lt;br/&gt;&lt;br/&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; name = (&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;)o[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;];&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Apple&lt;/span&gt;&lt;br/&gt; JArray sizes = (JArray)o[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Sizes&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br/&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; smallest = (&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;)sizes[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;];&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Small&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table class="feature-comparison" border="0"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Json.NET&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;DataContractJsonSerializer&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;JavaScriptSerializer&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Supports JSON&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports BSON&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports JSON Schema&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports .NET 2.0&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports .NET 3.5&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports .NET 4.0&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports Silverlight&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports Windows Phone&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Open Source&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MIT License&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LINQ to JSON&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Thread Safe&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;XPath-like JSON query syntax&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Indented JSON support&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://stackoverflow.com/questions/1207731/how-can-i-deserialize-json-to-a-simple-dictionarystring-string-in-asp-net" target="_blank"&gt;Efficient dictionary serialization&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://stackoverflow.com/questions/4559991/any-way-to-make-datacontractjsonserializer-serialize-dictionaries-properly" target="_blank"&gt;Nonsensical dictionary serialization&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Deserializes IList, IEnumerable, ICollection, IDictionary properties&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Serializes circular references&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports serializing objects by reference&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Deserializes polymorphic properties and collections&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports including type names with JSON&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Globally customize serialization process&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports excluding null values when serializing&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports SerializationBinder&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Conditional property serialization&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Includes line number information in errors&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Converts XML to JSON and JSON to XML&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;JSON Schema validation&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;JSON Schema generation from .NET types&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Camel case JSON property names&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Non-default constructors support&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Serialization error handling&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports populating an existing object&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Efficiently serializes byte arrays as base64 text&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Handles NaN, Infinity, -Infinity and undefined&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Handles JavaScript constructors&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Serializes .NET 4.0 dynamic objects&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Serializes ISerializable objects&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports serializing enums to their text name&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;JSON recursion limit support&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt; *&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Attribute property name customization&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Attribute property order customization&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Attribute property required customization&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports ISO8601 dates&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports JavaScript constructor dates&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports Microsoft AJAX dates&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Unquoted property names support&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Raw JSON support&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports reading and writing comments&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Deserializes anonymous types&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Opt-in property serialization&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Opt-out property serialization&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Efficiently stream reading and writing JSON&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Single or double quote JSON content&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports overriding a type's serialization&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports OnDeserialized, OnSerializing, OnSerialized and OnDeserializing attributes&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supports serializing private properties&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DataMember attribute support&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MetdataType attribute support&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DefaultValue attribute support&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Serializes DataSets and DataTables&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Serailizes Entity Framework&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Serializes nHibernate&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case-insensitive property deserialization&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/tick.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;img src="http://james.newtonking.com/images/cross.png" alt="" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2501968.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2012/05/17/windowsphone_json.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cracker/archive/2012/05/14/windowsphone_native_code.html</id><title type="text">Windows Phone开发经验谈(4)-Native代码调用开篇</title><summary type="text">大家在wp7开发的时候可能会遇到诸多这样或那样的限制,很多简单的功能微软也不让实现..比如导入通讯录功能、一键锁屏功能、重力感应开关...等等..微软并不开放给普通开发者做这些事情，但是很多事情确实是很普通..不会牵涉到什么问题...微软也不允许调用...而三星、htc、nokia这些大厂就能自由的使用..我们普通开发者真的没有希望自己也做这些事情么？答案是否定的。我在开发Quick Switch (快捷开关）http://dl.dbank.com/c0eo7gawxs的时候就用到了一些简单的native code。其实这也不是什么秘密了.下面我来给大家解密下。 如果你熟悉wm的开发..你完.</summary><published>2012-05-14T10:23:00Z</published><updated>2012-05-14T10:23:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2012/05/14/windowsphone_native_code.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2012/05/14/windowsphone_native_code.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 大家在wp7开发的时候可能会遇到诸多这样或那样的限制,很多简单的功能微软也不让实现..比如导入通讯录功能、一键锁屏功能、重力感应开关...等等..微软并不开放给普通开发者做这些事情，但是很多事情确实是很普通..不会牵涉到什么问题...微软也不允许调用...而三星、htc、nokia这些大厂就能自由的使用..我们普通开发者真的没有希望自己也做这些事情么？答案是否定的。我在开发Quick Switch (快捷开关）&lt;a href="http://dl.dbank.com/c0eo7gawxs"&gt;http://dl.dbank.com/c0eo7gawxs&lt;/a&gt;&amp;nbsp;的时候就用到了一些简单的native code。其实这也不是什么秘密了.下面我来给大家解密下。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果你熟悉wm的开发..你完全能够自己用c++写native代码给wp7调用....当然如果你不会或者不熟悉wm开发..没关系..很多高手都已经开发并封装好wp7&amp;nbsp;native代码你可以直接拿来调用.接下来我主要给大家介绍下xda的fiinix开发CSharp - DllImport&amp;nbsp;很多"非常规软件"都是基于这个做的...如 屏幕截图 快捷开关 ...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;首先分享下下载地址：&lt;a href="http://files.cnblogs.com/cracker/CSharpDllImport.RAR"&gt;http://files.cnblogs.com/cracker/CSharpDllImport.RAR&lt;/a&gt;&amp;nbsp;下载后有几个文件..其中比较重要的是 CSharp - DllImport.dll and MangoDllImportProject.dll&amp;nbsp; 前者是c#写的 后者就是 c++写的native 代码...使用的时候把后者放入项目中生成操作为 "内容"&amp;nbsp; 项目引用前者。如下面截图&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/112775/2012051418150632.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;不要以为这就可以了。看到截图中的WPInteropManifest.xml文件了么..你还需要在你的项目中放入.生成操作同样是 "内容".该xml内容如下&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br/&gt;&amp;lt;Interop&amp;gt;&lt;br/&gt;&amp;lt;/Interop&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果没有该文件wp7调用native代码的时候会出错...到此你就可以使用CSharp - DllImport.dll 来写一些特殊的代码了..虽然没有写c++代码但是你也可以通过它实现非常多禁用的功能成为传说中的&amp;ldquo;高手&amp;rdquo;&amp;nbsp;&amp;nbsp;了.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2499730.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2012/05/14/windowsphone_native_code.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cracker/archive/2012/05/14/windowsphoneGB2312.html</id><title type="text">Windows Phone开发经验谈(2)-GB2312编码转换</title><summary type="text">我曾经在开发一个app的时候必须用到GB2312编码，但是wp7并不支持后来只能靠曲线救国了。从http://gb2312.codeplex.com/载了GB2312 for Silverlight。下面我来介绍介绍如何使用这个类库。 ------------------------------------------------------------------------------------------- 文件下载下来后，有GB2312Encoding.cs 和 gb2312.bin 这两个文件，把这两个文件拷贝的你的项目中去。请阅读下面注意事项。gb2312.bin 文件的bui.</summary><published>2012-05-14T09:43:00Z</published><updated>2012-05-14T09:43:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2012/05/14/windowsphoneGB2312.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2012/05/14/windowsphoneGB2312.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp; 我曾经在开发一个app的时候必须用到GB2312编码，但是wp7并不支持后来只能靠曲线救国了。从&lt;a href="http://gb2312.codeplex.com/"&gt;http://gb2312.codeplex.com/&lt;/a&gt;&amp;nbsp;载了GB2312 for Silverlight。下面我来介绍介绍如何使用这个类库。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; -------------------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 文件下载下来后，有&amp;nbsp;GB2312Encoding.cs 和 gb2312.bin 这两个文件，把这两个文件拷贝的你的项目中去。请阅读下面注意事项。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;gb2312.bin 文件的build action 属性设置为 &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Embedded Resource&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;gb2312.bin 文件的文件名正确（不能修改此文件名）&lt;br/&gt;&lt;br/&gt;GB2312Encoding.cs 和 gb2312.bin 文件在同一个文件夹&lt;/span&gt;&lt;/div&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;WebClient _wc = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; WebClient();&lt;br/&gt;_wc.Encoding &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; GB2312.GB2312Encoding();&lt;br/&gt;_wc.DownloadStringCompleted &lt;/span&gt;+= (ss, ee) =&amp;gt; txtResult.Text =&lt;span style="color: #000000;"&gt; ee.Result;&lt;br/&gt;_wc.DownloadStringAsync(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Uri(txtUrl.Text));&lt;/div&gt;&lt;p&gt;&lt;br /&gt;好了 到此终于也让wp7 也支持GB2312编码了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2499707.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2012/05/14/windowsphoneGB2312.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cracker/archive/2012/04/21/2461075.html</id><title type="text">Windows Phone开发经验谈(1)-如何更好的带来收益</title><summary type="text">从Windows Phone诞生，我就开始关注，并着手开发，时至今日我也总结了很多有用的经验,今天我要说的就是开发什么样应用更能够带给开发者收益。WP7主要有3种盈利模式：靠广告赚钱，靠Marketplace赚钱，靠捐助赚钱。其实靠3这种盈利模式构建的app侧重点都各不相同，下面我给大家分析下：1、靠广告赚钱：在这种盈利模式下，你构建的应用程序必须是大家要常时间用的，比如看书软件，游戏软件之类的，如果你做一款天气软件靠广告赚钱，那大家看到天气信息你的广告也许还没显示出来用户就关闭了。2、靠Marketplace赚钱：如果你想用微软市场赚钱，那么我建议您的应用最好是全球用户都能用上的应用，如词.</summary><published>2012-04-21T02:35:00Z</published><updated>2012-04-21T02:35:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2012/04/21/2461075.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2012/04/21/2461075.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 从Windows Phone诞生，我就开始关注，并着手开发，时至今日我也总结了很多有用的经验,今天我要说的就是开发什么样应用更能够带给开发者收益。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WP7主要有3种盈利模式：靠广告赚钱，靠&lt;a href="http://www.cnblogs.com/cracker"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="color: #0066cc;"&gt;Marketplace&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;赚钱，靠捐助赚钱。其实靠3这种盈利模式构建的app侧重点都各不相同，下面我给大家分析下：&lt;/p&gt;&lt;p&gt;1、靠广告赚钱：&lt;/p&gt;&lt;p&gt;在这种盈利模式下，你构建的应用程序必须是大家要常时间用的，比如看书软件，游戏软件之类的，如果你做一款天气软件靠广告赚钱，那大家看到天气信息你的广告也许还没显示出来用户就关闭了。&lt;/p&gt;&lt;p&gt;2、靠&lt;span style="text-decoration: underline;"&gt;&lt;span style="color: #0066cc;"&gt;Marketplace&lt;/span&gt;&lt;/span&gt;赚钱：&lt;/p&gt;&lt;p&gt;如果你想用微软市场赚钱，那么我建议您的应用最好是全球用户都能用上的应用，如词典之类，音乐，游戏之类的，做好语言本地化或者可以切换的功能，这样有什么好处呢？众所周知，Marketplace对国内支付还没完善，国内能上市场买应用的人更是凤毛麟角，如果真的是为了赚钱，应用必须适合大多数国家，在全球市场提供下载，这样会给你带来意想不到的收入的，当然应用最好要提供试用版下载，这样大家才会了解你的应用，才会知道适合不适合自己，有统计表名有提供试用版本下载的软件，购买率比没提供试用版下载的收费软件高70%，可见如果你要在市场上赚钱提供试用版下载是必须的选项。&lt;/p&gt;&lt;p&gt;3、靠捐助赚钱：&lt;/p&gt;&lt;p&gt;其实靠捐助赚钱，首先要保证你的应用质量或者有些别人做不到的功能，这样的app才会值得大家捐助，国内开发者想出的捐助方式有挺多的，很多在软件里面写一个捐助链接，这样大家在使用的过程中能够看到捐助链接，会潜移默化的使许多用户捐助，还有的童鞋就是直接在论坛上写了支付宝支付的地址，当然还有很多开发者在市场上提供了和收费版本功能相同的免费版本，这样有能力用户会去购买软件，普通用户也可以使用免费的软件版本，这样也相当于自愿捐助的模式，不过我觉得市场很乱，一款软件有几个版本，最典型的就是QQ，一搜出现N款...微软其实还是应该监管好Marketplace，现在上面还是挺乱的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2461075.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2012/04/21/2461075.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cracker/archive/2012/02/22/windowsphone_wp_flashlight.html</id><title type="text">Windows Phone开发经验谈(3)-突破限制开发Windows Phone手电筒(三种方案)</title><summary type="text">现在的Windows Phone开发实在是太封闭了，很多功能都无法实现,只有三星、LG、戴尔、Nokia这些厂家能利用Native代码开发应用，目前就HTC开发了手电筒软件发布到了微软市场,但是普通开发者利用native代码就无法提交大市场,当然有很多聪明的开发者不用LED相关的API照样开发出了手电筒应用,下面来讨论几种常用方法。一、在应用中创建了一个死循环，无限调用摄像头的Focus()方法，即自动对焦，而摄像头处于对焦状态时LED是亮着的，间接实现了手电筒功能。优点：能发布到微软市场.缺点:对摄像头损伤大二、人类的脑子是无比强大的，有人发现在windows phone有一个Micros.</summary><published>2012-02-22T03:15:00Z</published><updated>2012-02-22T03:15:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2012/02/22/windowsphone_wp_flashlight.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2012/02/22/windowsphone_wp_flashlight.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 现在的Windows Phone开发实在是太封闭了，很多功能都无法实现,只有三星、LG、戴尔、Nokia这些厂家能利用Native代码开发应用，目前就HTC开发了手电筒软件发布到了微软市场,但是普通开发者利用native代码就无法提交大市场,当然有很多聪明的开发者不用LED相关的API照样开发出了手电筒应用,下面来讨论几种常用方法。&lt;/p&gt;&lt;p&gt;一、在应用中创建了一个死循环，无限调用摄像头的Focus()方法，即自动对焦，而摄像头处于对焦状态时LED是亮着的，间接实现了&lt;span class="wmkHighLight"&gt;手电筒&lt;/span&gt;功能。&lt;/p&gt;&lt;p&gt;优点：能发布到微软市场.&lt;/p&gt;&lt;p&gt;缺点:对摄像头损伤大&lt;/p&gt;&lt;p&gt;二、人类的脑子是无比强大的，有人发现在windows phone有一个Microsoft.Phone.Media.Extended.dll，通过他能调用手机的摄像头，通过录像让闪光灯开启。但是打开vs2010发现根本没有Microsoft.Phone.Media.Extended这个程序集。顺藤摸瓜找到了&lt;a href="http://dotnet.dzone.com/users/dotcore" target="_blank"&gt;Den Delimarsky&lt;/a&gt;写的两篇文章&lt;a href="http://dotnet.dzone.com/articles/not-your-regular-photo-and" target="_blank"&gt;Not your regular photo and video camera on Windows Phone 7&lt;/a&gt;和How &lt;a href="http://dotnet.dzone.com/articles/how-videocameracamera-content" target="_blank"&gt;VideoCamera/PhotoCamera content is saved on Windows Phone 7&lt;/a&gt;，前一篇介绍了如何使用PhotoCamera和VideoCamera进行摄像头图像实时显示，后一篇则是介绍怎么取到拍照后的数据，写得很棒，通俗易懂。文章中提到：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;通过反射调用摄像头比较慢而且增加多余的代码。所以我转而使用GAC程序集&amp;ldquo;GAC_Microsoft.Phone.Media.Extended_v7_0_0_0_cneutral_1.dll&amp;rdquo;，由于是托管代码，所以就不用加上WMInteropManifest.xml文件（或者&amp;lt;Capability Name=&amp;rdquo;ID_CAP_INTEROPSERVICES&amp;rdquo;/&amp;gt;）了。&lt;/p&gt;&lt;div class="quote_bottom"&gt;&amp;nbsp;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;并且提供了GAC Dump（可以看作未开放API程序集的集合）下载。不过没有详细教程，于是搜了一下实现GAC Dump的牛人Thomas Hounsell的Blog，找到了方法 &lt;a href="http://thounsell.co.uk/2010/11/avoiding-reflection-adding-the-interopservices-library-to-the-wp7-sdk/" target="_blank"&gt;Avoiding Reflection: Adding the InteropServices library to the WP7 SDK&lt;/a&gt;。总结起来很简单：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;首先下载Hounsell那篇文章里面的7z文件。&lt;/p&gt;&lt;p&gt;捡自己需要的放到C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone，记得改名，把前后下划线前的内容都去掉。比如对于原生摄像头，我们需要Microsoft.Phone.Media.Extended.dll。&lt;/p&gt;&lt;p&gt;打开RedistList文件夹里面的FrameworkList.xml文件，记得用管理员权限。新增一个File标签（复制之前的就行），程序集名改成你刚刚加入的那个dll的，去掉publicKeyToken属性。保存。&lt;/p&gt;&lt;div class="quote_bottom"&gt;&amp;nbsp;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;当然还必须执行sn.exe -Vr [dll path]对DLL进行签名.这样就可以使用Microsoft.Phone.Media.Extended.dll了。&lt;/p&gt;&lt;p&gt;优点：对摄像头损伤小&lt;/p&gt;&lt;p&gt;缺点：原来是可以提交到市场，但是现在微软发现了，此类调用已经无法提交到市场了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;三、俗话说的好你有张良记，我有过墙梯，其实Microsoft.Phone.Media.Extended.dll在windows phone全局缓存中，可以通过反射来调用此程序集，当然这样的速度稍微慢点，不过是可以接受的。&lt;/p&gt;&lt;p&gt;优点：可以提交到市场，对摄像头损伤小&lt;/p&gt;&lt;p&gt;缺点：速度稍微慢点。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;好了说了这么多，大家自己研究 研究，有好的方案也不要吝啬拿出来分享吧。博客地址：&lt;a href="http://www.cnblogs.com/cracker"&gt;http://www.cnblogs.com/cracker&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2362806.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2012/02/22/windowsphone_wp_flashlight.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cracker/archive/2012/02/08/2342342.html</id><title type="text">&amp;quot;ObjectContext 实例已释放，不可再用于需要连接的操作&amp;quot;MVC开发出错解决方案</title><summary type="text">由于用EF开发，序列化成json带有外键的列就会出现了上述的问题。解决方案可以参考下面2个网址.ADO.NET 实体数据模型 异常-“序列化类型为 XX 的对象时检测到循环引用” http://archive.cnblogs.com/a/1956117/此 ObjectContext 实例已释放，不可再用于需要连接的操作。http://www.cnblogs.com/Joetao/articles/1945211.html</summary><published>2012-02-08T02:43:00Z</published><updated>2012-02-08T02:43:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2012/02/08/2342342.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2012/02/08/2342342.html"/><content type="html">&lt;p&gt;由于用EF开发，序列化成json带有外键的列就会出现了上述的问题。解决方案可以参考下面2个网址.&lt;/p&gt;&lt;p&gt;ADO.NET 实体数据模型 异常-&amp;ldquo;序列化类型为 XX 的对象时检测到循环引用&amp;rdquo; http://archive.cnblogs.com/a/1956117/&amp;nbsp;&lt;/p&gt;&lt;p&gt;此 ObjectContext 实例已释放，不可再用于需要连接的操作。http://www.cnblogs.com/Joetao/articles/1945211.html&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2342342.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2012/02/08/2342342.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cracker/archive/2011/10/28/2227545.html</id><title type="text">Reporting Services 逻辑判断语句</title><summary type="text">if(heji&gt;3){ return "合格";}else{return "不合格"}上面的语句在Reporting Services中可以采用=IIf(Fields!heji.Value&gt;3,"合格","不合格")来实现.</summary><published>2011-10-28T04:46:00Z</published><updated>2011-10-28T04:46:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2011/10/28/2227545.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2011/10/28/2227545.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(&lt;span style="color: #0000ff;"&gt;heji&amp;gt;3&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #800000;"&gt;"合格&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #800000;"&gt;"不合格&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;br /&gt;上面的语句在Reporting Services中可以采用=IIf(Fields!heji.Value&amp;gt;3,"合格","不合格")来实现.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2227545.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2011/10/28/2227545.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cracker/archive/2011/09/21/mvc_upload_progress.html</id><title type="text">Asp.net mvc 3 实现进度条上传思路</title><summary type="text">最近在做asp.net mvc 大文件上传，但是每次大文件上传的响应时间都很长，没有提示就给不了用户良好的体验，所以想了想还是必须在文件上传时显示进度条，但是asp.net默认的文件上传管道是无法显示进度条的。所以就必须自己手动创建一个接收管道。实现的方式有2种，一种是写一个类继承IHttpModule接口然后实现其中的方法，还有一种就是直接在Global.asax里面的Application_BeginRequest写上传文件的方法。 在写文件接收方法的时候应该分块来接收文件，然后在同时保存文件的状态，这时候就要注意如何保存文件的状态,以便客户端获取，我想了几种方式总结出来1、可以使用Ap.</summary><published>2011-09-21T02:32:00Z</published><updated>2011-09-21T02:32:00Z</updated><author><name>豆浆咖啡</name><uri>http://www.cnblogs.com/cracker/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cracker/archive/2011/09/21/mvc_upload_progress.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cracker/archive/2011/09/21/mvc_upload_progress.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最近在做asp.net mvc 大文件上传，但是每次大文件上传的响应时间都很长，没有提示就给不了用户良好的体验，所以想了想还是必须在文件上传时显示进度条，但是asp.net默认的文件上传管道是无法显示进度条的。所以就必须自己手动创建一个接收管道。实现的方式有2种，一种是写一个类继承IHttpModule接口然后实现其中的方法，还有一种就是直接在Global.asax里面的Application_BeginRequest写上传文件的方法。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在写文件接收方法的时候应该分块来接收文件，然后在同时保存文件的状态，这时候就要注意如何保存文件的状态,以便客户端获取，我想了几种方式总结出来&lt;/p&gt;&lt;p&gt;1、可以使用Application变量。Application对象的作用范围是整个全局，也就是说对所有用户都有效。其常用的方法用Lock和UnLock。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Application.Lock(); &lt;br/&gt;&lt;br/&gt;Application["GUID"]=upload;&lt;br/&gt;&lt;br/&gt;Application.UnLock(); &lt;br/&gt;&lt;/div&gt;&lt;p&gt;2、使用Session变量。想必这个肯定是大家使用中最常见的用法了，其操作与Application类似，作用于用户个人，所以，过量的存储会导致服务器内存资源的耗尽。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Session["GUID"]=upload;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;3、使用Cookie变量。这个也是大家常使用的方法，与Session一样，其实是对每一个用户而言的，但是他们有个本质的区别，即Cookie是存放在客户端的，而Session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来调用。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;            HttpCookie myCookie = new HttpCookie(cookieName);&lt;br/&gt;            myCookie = HttpContext.Current.Request.Cookies[cookieName];&lt;br/&gt;            HttpContext.Current.Response.Cookies.Add(myCookie);&lt;br/&gt;            HttpCookie myCookie = new HttpCookie(cookieName);&lt;br/&gt;            myCookie = HttpContext.Current.Request.Cookies[cookieName];&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;4、使用Cache,但是.NET中Cache有两种调用方式：HttpContext.Current.Cache 和 HttpRuntime.Cache。下面的是MSDN的解释。&lt;/p&gt;&lt;p&gt;HttpContext.&lt;span style="font-family: Verdana;" face="Verdana"&gt;Current&lt;/span&gt;.Cache：为当前 HTTP 请求获取Cache对象。&lt;br /&gt; HttpRuntime.Cache：获取当前应用程序的Cache。&lt;br /&gt;HttpContext：封装有关个别HTTP请求的所有HTTP特定的信息，&lt;span style="font-family: Verdana;" face="Verdana"&gt;HttpContext.Current为当前的HTTP请求获取HttpContext对象。&lt;/span&gt;&lt;br /&gt; HttpRuntime：为当前应用程序提供一组ASP.NET运行时服务。&lt;/p&gt;&lt;p&gt;其实HttpRuntime.Cache相当于就是一个缓存具体实现类，这个类虽然被放在了System.Web命名空间下，但是非Web应用下也是可以使用；HttpContext.Current.Cache是对上述缓存类的封装，由于封装到了HttpContext类中，局限于只能在知道HttpContext下使用，即只能用于Web应用。&lt;/p&gt;&lt;p&gt;&lt;span class="myRed"&gt;&lt;span style="font-family: Verdana;" face="Verdana"&gt;既然我们这边是采用mvc3是web应用程序，那我们就都可以使用，但是我建议既然是web应用程序还是使用HttpContext.Current.Cache.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;HttpContext.Current.Cache[Guid]&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;span class="myRed"&gt;&lt;span style="font-family: Verdana;" face="Verdana"&gt;-------------------------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="myRed"&gt;&lt;span style="font-family: Verdana;" face="Verdana"&gt;以上4种都可以算是全局变量，但是有的并不是很好的方案，建议使用第一种和第四种来存储数据。我是采用Cache来存储文件进度的信息的。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="myRed"&gt;&lt;span style="font-family: Verdana;" face="Verdana"&gt;这时候又有一个问题了。我们应该怎么知道当前上传的是什么应用程序呢？我使用的是GUID来标识，这样上传上来的程序就有唯一的标识符了。多个用户同时上传也不会有问题了。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="myRed"&gt;&lt;span style="font-family: Verdana;" face="Verdana"&gt;在客户端方面我采用了Jquery 版本号&amp;nbsp;1.64&amp;nbsp;、&amp;nbsp;jquery.blockUI.js 版本号&amp;nbsp;1.23、 jquery.form.js 版本号&amp;nbsp;2.84 、jquery-ui.js 版本号 1.8.16&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="myRed"&gt;&lt;span style="font-family: Verdana;" face="Verdana"&gt;用jquery.blockUI来实现弹出层，jquery.form用来提交数据，Jquery 的$.ajax方法来获取当前文件进度的状态Json，jquery-ui来实现进度条信息。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/112775/2011092110295294.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="myRed"&gt;&lt;span style="font-family: Verdana;" face="Verdana"&gt;下面是MVC3大文件上传的截图，这篇文章主要是讨论文件上传实现进度条的思路并没有提供demo进行下载有什么问题可以留言。&lt;/span&gt;&lt;/span&gt;&lt;span class="myRed"&gt;&lt;span style="font-family: Verdana;" face="Verdana"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/112775/2011092109372173.jpg" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cracker/aggbug/2183156.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cracker/archive/2011/09/21/mvc_upload_progress.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
