[转载][C#技术] .NET平台开源JSON库LitJSON的使用方法 - 郑文亮 - 博客园

[转载][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 (英文)

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

登录

注册