[转载][C#技术] .NET平台开源JSON库LitJSON的使用方法 – 郑文亮 – 博客园.一个简单示例:
<span class="typ">String</span><span class="pln"> str </span><span class="pun">=</span><span class="pln"> </span><span class="str">"{’name’:’cyf’,’id’:10,’items’:[{’itemid’:1001,’itemname’:’hello’},{’itemid’:1002,’itemname’:’hello2’}]}"</span><span class="pun">;</span><span class="pln"> </span><span class="com">//*** 读取JSON字符串中的数据 ******************************* JsonData jd = JsonMapper.ToObject(str); String name = (String)jd["name"]; long id = (long)jd["id"]; JsonData jdItems = jd["items"]; int itemCnt = jdItems.Count; // 数组 items 中项的数量 foreach (JsonData item in jdItems) // 遍历数组 items {int itemID = (int)item["itemid"]; String itemName = (String)item["itemname"]; }</span><span class="pln"> </span><span class="com">//*** 将JsonData转换为JSON字符串 ***************************</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> str2 </span><span class="pun">=</span><span class="pln"> jd</span><span class="pun">.</span><span class="typ">ToJson</span><span class="pun">();</span> |
下载地址 :下载
LitJSON是一个.NET平台下处理JSON格式数据的类库,小巧、快速。它的源代码使用C#编写,可以通过任何.Net平台上的语言进行调用,目前最新版本为LitJSON 0.5.0。
与以下这几个.Net平台上的开源JSON库相比,LitJSON的性能遥遥领先:
Jayrock version 0.9.8316
LitJSON version 0.3.0
Newtonsoft Json.NET version 1.1
下面介绍LitJSON中常用的方法:
以下示例需要先添加引用LitJson.dll,再导入命名空间 using LitJson;
点击直接下载LitJSON.dll,也可以到http://litjson.sourceforge.net去下载。
1、Json 与 C#中 实体对象 的相互转换
例 1.1:使用 JsonMapper 类实现数据的转换
<span class = "pln" >ublic </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > </span><span class = "typ" >Name</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > get </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > set </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > </span><span class = "typ" >Age</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > get </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > set </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "typ" >DateTime</span><span class = "pln" > </span><span class = "typ" >Birthday</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > get </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "kwd" > set </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "typ" >JsonSample</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >Main</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >PersonToJson</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "typ" >JsonToPerson</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > ///</span><span class="pln"> </span><span class = "com" > /// 将实体类转换成Json格式</span><span class="pln"> </span><span class = "com" > ///</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >PersonToJson</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pln" > bill </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >Person</span><span class = "pun" >();</span><span class = "pln" > bill</span><span class = "pun" >.</span><span class = "typ" >Name</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "str" > "www.87cool.com" </span><span class = "pun" >;</span><span class = "pln" > bill</span><span class = "pun" >.</span><span class = "typ" >Age</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "lit" >3</span><span class = "pun" >;</span><span class = "pln" > bill</span><span class = "pun" >.</span><span class = "typ" >Birthday</span><span class = "pln" > </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >DateTime</span><span class = "pun" >(</span><span class = "lit" >2007</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" >7</span><span class = "pun" >,</span><span class = "pln" > </span><span class = "lit" >17</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > json_bill </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >JsonMapper</span><span class = "pun" >.</span><span class = "typ" >ToJson</span><span class = "pun" >(</span><span class = "pln" >bill</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "typ" >Console</span><span class = "pun" >.</span><span class = "typ" >WriteLine</span><span class = "pun" >(</span><span class = "pln" >json_bill</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "com" > //输出:{"Name":"www.87cool.com","Age":3,"Birthday":"07/17/2007 00:00:00"}</span><span class="pln"> </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > ///</span><span class="pln"> </span><span class = "com" > /// 将Json数据转换成实体类</span><span class="pln"> </span><span class = "com" > ///</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >JsonToPerson</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > json </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "pun" >@</span><span class = "str" >" { "" Name "" : "" www.87cool.com "" , "" Age "" : 3, "" Birthday "" : "" 07/17/2007 00:00:00 "" } "</span><span class=" pun ">;</span><span class=" pln"> </span><span class = "typ" >Person</span><span class = "pln" > thomas </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >JsonMapper</span><span class = "pun" >.</span><span class = "typ" >ToObject</span><span class = "pun" >(</span><span class = "pln" >json</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "typ" >Console</span><span class = "pun" >.</span><span class = "typ" >WriteLine</span><span class = "pun" >(</span><span class = "str" > "’87cool’ age: {0}" </span><span class = "pun" >,</span><span class = "pln" > thomas</span><span class = "pun" >.</span><span class = "typ" >Age</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "com" > //输出:’87cool’ age: 3</span><span class="pln"> </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span> |
例 1.2:使用 JsonMapper 类将Json字符串转换为C#认识的JsonData,再通过Json数据的属性名或索引获取其值。
在C#中读取JsonData对象 和 在JavaScript中读取Json对像的方法完全一样;
对Json的这种读取方式在C#中用起来非常爽,同时也很实用,因为现在很多网络应用提供的API所返回的数据都是Json格式的,
如Flickr相册API返回的就是json格式的数据。
<span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >LoadAlbumData</span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > json_text</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >JsonData</span><span class = "pln" > data </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "typ" >JsonMapper</span><span class = "pun" >.</span><span class = "typ" >ToObject</span><span class = "pun" >(</span><span class = "pln" >json_text</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "typ" >Console</span><span class = "pun" >.</span><span class = "typ" >WriteLine</span><span class = "pun" >(</span><span class = "str" > "Album’s name: {0}" </span><span class = "pun" >,</span><span class = "pln" > data</span><span class = "pun" >[</span><span class = "str" > "album" </span><span class = "pun" >][</span><span class = "str" > "name" </span><span class = "pun" >]);</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > artist </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pun" >)</span><span class = "pln" >data</span><span class = "pun" >[</span><span class = "str" > "album" </span><span class = "pun" >][</span><span class = "str" > "name" </span><span class = "pun" >];</span><span class = "pln" > </span><span class = "kwd" > int </span><span class = "pln" > year </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "kwd" > int </span><span class = "pun" >)</span><span class = "pln" >data</span><span class = "pun" >[</span><span class = "str" > "album" </span><span class = "pun" >][</span><span class = "str" > "year" </span><span class = "pun" >];</span><span class = "pln" > </span><span class = "typ" >Console</span><span class = "pun" >.</span><span class = "typ" >WriteLine</span><span class = "pun" >(</span><span class = "str" > "First track: {0}" </span><span class = "pun" >,</span><span class = "pln" > data</span><span class = "pun" >[</span><span class = "str" > "album" </span><span class = "pun" >][</span><span class = "str" > "tracks" </span><span class = "pun" >][</span><span class = "lit" >0</span><span class = "pun" >]);</span><span class = "pln" > </span><span class = "pun" >}</span> |
2、C# 中对 Json 的 Readers 和 Writers
例 2.1:JsonReader类的使用方法
<span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "typ" >DataReader</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >Main</span><span class = "pln" > </span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > sample </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "pun" >@</span><span class = "str" >"{ "" name "" : "" Bill "" , "" age "" : 32, "" awake "" : true , "" n "" : 1994.0226, "" note "" : [ "" life "" , "" is "" , "" but "" , "" a "" , "" dream "" ] } "</span><span class=" pun ">;</span><span class=" pln"> </span><span class = "typ" >ReadJson</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >sample</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > //输出所有Json数据的类型和值</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >ReadJson</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "kwd" > string </span><span class = "pln" > json</span><span class = "pun" >)</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >JsonReader</span><span class = "pln" > reader </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >JsonReader</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >json</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "typ" >Console</span><span class = "pun" >.</span><span class = "typ" >WriteLine</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "str" > "{0,14} {1,10} {2,16}" </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "str" > "Token" </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "str" > "Value" </span><span class = "pun" >,</span><span class = "pln" > </span><span class = "str" > "Type" </span><span class = "pun" >);</span><span class = "pln" > </span><span class = "typ" >Console</span><span class = "pun" >.</span><span class = "typ" >WriteLine</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >String</span><span class = "pln" > </span><span class = "pun" >(’-’,</span><span class = "pln" > </span><span class = "lit" >42</span><span class = "pun" >));</span><span class = "pln" > </span><span class = "kwd" > while </span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >reader</span><span class = "pun" >.</span><span class = "typ" >Read</span><span class = "pun" >())</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "kwd" > string </span><span class = "pln" > type </span><span class = "pun" >=</span><span class = "pln" > reader</span><span class = "pun" >.</span><span class = "typ" >Value</span><span class = "pln" > </span><span class = "pun" >!=</span><span class = "pln" > </span><span class = "kwd" > null </span><span class = "pln" > </span><span class = "pun" >?</span><span class = "pln" > reader</span><span class = "pun" >.</span><span class = "typ" >Value</span><span class = "pun" >.</span><span class = "typ" >GetType</span><span class = "pun" >().</span><span class = "typ" >ToString</span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >:</span><span class = "pln" > </span><span class = "str" > "" </span><span class = "pun" >;</span><span class = "pln" > </span><span class = "typ" >Console</span><span class = "pun" >.</span><span class = "typ" >WriteLine</span><span class = "pun" >(</span><span class = "str" > "{0,14} {1,10} {2,16}" </span><span class = "pun" >,</span><span class = "pln" > reader</span><span class = "pun" >.</span><span class = "typ" >Token</span><span class = "pun" >,</span><span class = "pln" > reader</span><span class = "pun" >.</span><span class = "typ" >Value</span><span class = "pun" >,</span><span class = "pln" > type</span><span class = "pun" >);</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "com" > //输出结果:</span><span class="pln"> </span><span class = "com" > // Json类型 值 C#类型</span><span class="pln"> </span><span class = "com" > //------------------------------------------</span><span class="pln"> </span><span class = "com" > // ObjectStart </span><span class="pln"> </span><span class = "com" > // PropertyName name System.String</span><span class="pln"> </span><span class = "com" > // String Bill System.String</span><span class="pln"> </span><span class = "com" > // PropertyName age System.String</span><span class="pln"> </span><span class = "com" > // Int 32 System.Int32</span><span class="pln"> </span><span class = "com" > // PropertyName awake System.String</span><span class="pln"> </span><span class = "com" > // Boolean True System.Boolean</span><span class="pln"> </span><span class = "com" > // PropertyName n System.String</span><span class="pln"> </span><span class = "com" > // Double 1994.0226 System.Double</span><span class="pln"> </span><span class = "com" > // PropertyName note System.String</span><span class="pln"> </span><span class = "com" > // ArrayStart </span><span class="pln"> </span><span class = "com" > // String life System.String</span><span class="pln"> </span><span class = "com" > // String is System.String</span><span class="pln"> </span><span class = "com" > // String but System.String</span><span class="pln"> </span><span class = "com" > // String a System.String</span><span class="pln"> </span><span class = "com" > // String dream System.String</span><span class="pln"> </span><span class = "com" > // ArrayEnd </span><span class="pln"> </span><span class = "com" > // ObjectEnd</span> |
例 2.2:JsonWriter类的使用方法
<span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > class </span><span class = "pln" > </span><span class = "typ" >DataReader</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "com" > //通过JsonWriter类创建一个Json对象</span><span class="pln"> </span><span class = "kwd" > public </span><span class = "pln" > </span><span class = "kwd" > static </span><span class = "pln" > </span><span class = "kwd" > void </span><span class = "pln" > </span><span class = "typ" >WriteJson</span><span class = "pln" > </span><span class = "pun" >()</span><span class = "pln" > </span><span class = "pun" >{</span><span class = "pln" > </span><span class = "typ" >System</span><span class = "pun" >.</span><span class = "typ" >Text</span><span class = "pun" >.</span><span class = "typ" >StringBuilder</span><span class = "pln" > sb </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >System</span><span class = "pun" >.</span><span class = "typ" >Text</span><span class = "pun" >.</span><span class = "typ" >StringBuilder</span><span class = "pun" >();</span><span class = "pln" > </span><span class = "typ" >JsonWriter</span><span class = "pln" > writer </span><span class = "pun" >=</span><span class = "pln" > </span><span class = "kwd" > new </span><span class = "pln" > </span><span class = "typ" >JsonWriter</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >sb</span><span class = "pun" >);</span><span class = "pln" > writer</span><span class = "pun" >.</span><span class = "typ" >WriteArrayStart</span><span class = "pln" > </span><span class = "pun" >();</span><span class = "pln" > writer</span><span class = "pun" >.</span><span class = "typ" >Write</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "lit" >1</span><span class = "pun" >);</span><span class = "pln" > writer</span><span class = "pun" >.</span><span class = "typ" >Write</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "lit" >2</span><span class = "pun" >);</span><span class = "pln" > writer</span><span class = "pun" >.</span><span class = "typ" >Write</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "lit" >3</span><span class = "pun" >);</span><span class = "pln" > writer</span><span class = "pun" >.</span><span class = "typ" >WriteObjectStart</span><span class = "pln" > </span><span class = "pun" >();</span><span class = "pln" > writer</span><span class = "pun" >.</span><span class = "typ" >WritePropertyName</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "str" > "color" </span><span class = "pun" >);</span><span class = "pln" > writer</span><span class = "pun" >.</span><span class = "typ" >Write</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "str" > "blue" </span><span class = "pun" >);</span><span class = "pln" > writer</span><span class = "pun" >.</span><span class = "typ" >WriteObjectEnd</span><span class = "pln" > </span><span class = "pun" >();</span><span class = "pln" > writer</span><span class = "pun" >.</span><span class = "typ" >WriteArrayEnd</span><span class = "pln" > </span><span class = "pun" >();</span><span class = "pln" > </span><span class = "typ" >Console</span><span class = "pun" >.</span><span class = "typ" >WriteLine</span><span class = "pln" > </span><span class = "pun" >(</span><span class = "pln" >sb</span><span class = "pun" >.</span><span class = "typ" >ToString</span><span class = "pln" > </span><span class = "pun" >());</span><span class = "pln" > </span><span class = "com" > //输出:[1,2,3,{"color":"blue"}]</span><span class="pln"> </span><span class = "pun" >}</span><span class = "pln" > </span><span class = "pun" >}</span> |
更详细的可参考 http://litjson.sourceforge.net/doc/manual.html (英文)