[C#技术] .NET平台开源JSON库LitJSON的使用方法

原文:[C#技术] .NET平台开源JSON库LitJSON的使用方法

一个简单示例:

String str = "{’name’:’cyf’,’id’:10,’items’:[{’itemid’:1001,’itemname’:’hello’},{’itemid’:1002,’itemname’:’hello2’}]}";               //*** 读取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"];         }              
//*** 将JsonData转换为JSON字符串 ***************************          
String str2 = jd.ToJson();

下载地址 :下载

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 类实现数据的转换

ublic class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime Birthday { get; set; }
    }
    public class JsonSample
    {
        public static void Main()
        {
            PersonToJson();
            JsonToPerson();
        }
        /// 
        /// 将实体类转换成Json格式
        /// 
        public static void PersonToJson()
        {
            Person bill = new Person();
            bill.Name = "www.87cool.com";
            bill.Age = 3;
            bill.Birthday = new DateTime(2007, 7, 17);
            string json_bill = JsonMapper.ToJson(bill);
            Console.WriteLine(json_bill);
            //输出:{"Name":"www.87cool.com","Age":3,"Birthday":"07/17/2007 00:00:00"}
        }

        /// 
        /// 将Json数据转换成实体类
        /// 
        public static void JsonToPerson()
        {
            string json = @"
            {
                ""Name""    : ""www.87cool.com"",
                ""Age""      : 3,
                ""Birthday"" : ""07/17/2007 00:00:00""
            }";
            Person thomas = JsonMapper.ToObject(json);
            Console.WriteLine("’87cool’ age: {0}", thomas.Age);
            //输出:’87cool’ age: 3
        }
    }

例 1.2:使用 JsonMapper 类将Json字符串转换为C#认识的JsonData,再通过Json数据的属性名或索引获取其值。

在C#中读取JsonData对象 和 在JavaScript中读取Json对像的方法完全一样;

对Json的这种读取方式在C#中用起来非常爽,同时也很实用,因为现在很多网络应用提供的API所返回的数据都是Json格式的,

如Flickr相册API返回的就是json格式的数据。
        public static void LoadAlbumData(string json_text)
        {
            JsonData data = JsonMapper.ToObject(json_text);
            Console.WriteLine("Album’s name: {0}", data["album"]["name"]);
            string artist = (string)data["album"]["name"];
            int year = (int)data["album"]["year"];
            Console.WriteLine("First track: {0}", data["album"]["tracks"][0]);
        }

2、C# 中对 Json 的 Readers 和 Writers

例 2.1:JsonReader类的使用方法 
public class DataReader
{
    public static void Main ()
    {
        string sample = @"{
            ""name""  : ""Bill"",
            ""age""  : 32,
            ""awake"" : true,
            ""n""    : 1994.0226,
            ""note""  : [ ""life"", ""is"", ""but"", ""a"", ""dream"" ]
          }";
        ReadJson (sample);
    }
    //输出所有Json数据的类型和值
    public static void ReadJson (string json)
    {
        JsonReader reader = new JsonReader (json);
        
        Console.WriteLine ("{0,14} {1,10} {2,16}", "Token", "Value", "Type");
        Console.WriteLine (new String (’-’, 42));
        while (reader.Read())
        {
            string type = reader.Value != null ? reader.Value.GetType().ToString() : "";
            Console.WriteLine("{0,14} {1,10} {2,16}", reader.Token, reader.Value, type);
        }
    }
}
      
//输出结果:

//      Json类型        值          C#类型
//------------------------------------------
//  ObjectStart                            
//  PropertyName      name    System.String
//        String      Bill    System.String
//  PropertyName        age    System.String
//          Int        32    System.Int32
//  PropertyName      awake    System.String
//      Boolean      True  System.Boolean
//  PropertyName          n    System.String
//        Double  1994.0226    System.Double
//  PropertyName      note    System.String
//    ArrayStart                            
//        String      life    System.String
//        String        is    System.String
//        String        but    System.String
//        String          a    System.String
//        String      dream    System.String
//      ArrayEnd                            
//    ObjectEnd

例 2.2:JsonWriter类的使用方法 
public class DataReader
{
    //通过JsonWriter类创建一个Json对象
    public static void WriteJson ()
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        JsonWriter writer = new JsonWriter (sb);
        writer.WriteArrayStart ();
        writer.Write (1);
        writer.Write (2);
        writer.Write (3);
        writer.WriteObjectStart ();
        writer.WritePropertyName ("color");
        writer.Write ("blue");
        writer.WriteObjectEnd ();
        writer.WriteArrayEnd ();
        Console.WriteLine (sb.ToString ());
        //输出:[1,2,3,{"color":"blue"}]
    }
}

更详细的可参考 http://litjson.sourceforge.net/doc/manual.html (英文)

时间: 2024-11-03 02:21:04

[C#技术] .NET平台开源JSON库LitJSON的使用方法的相关文章

机器视觉开源处理库汇总

机器视觉开源处理库汇总 从cvchina搞到的机器视觉开源处理库汇总,转来了,很给力,还在不断更新... 通用库/General Library OpenCV 无需多言. RAVL Recognition And Vision Library. 线程安全.强大的IO机制.包含AAM. CImg 很酷的一个图像处理包.整个库只有一个头文件.包含一个基于PDE的光流算法. 图像,视频IO/Image, Video IO FreeImage DevIL ImageMagick FFMPEG Video

C++ 100款开源界面库 (10)

(声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的教程<2013 duilib入门简明教程>,还有本系列教程,还有前面介绍的CodeProject,基本上都是代码往上面一扔,就不用再怎么维护的.这些都称之为开源代码,其实开源代码对新手的帮助更大,因为很简明的说明了代码用法~O(∩_∩)O~)       前面两个教程已经对制作界面的几种方式进行了

技术雷达:开源让人工智能实现跨越式发展

一直游离在技术雷达象限范围外的人工智能,这一次居然通过开源框架,一步进入到实用领域,这个结果既在意料之外,又在意料之中. 近日,ThoughtWorks公司发布了最新一期技术雷达,雷达发布了关于容器.人工智能.团队结构以及AR/VR等四个新趋势.其中,长期待在实验室的机器学习和人工智能,突然通过Nuance Mix.TensorFlow等框架进入到实用领域,这些开源框架支持开发者下载NLP.机器学习库等复杂的库和工具,使开发者能够广泛地加以应用. ThoughtWorks CTO徐昊 技术雷达是

Linux 基金会无人机开源代码库项目 Dronecode

dronecode无人机开源项目无人机无疑是时下最火爆的硬件创业项目之一,除了亚马逊.Google这样的资深玩家,数以万计的独立开发者和创业公司都希望通过在垂直领域中整合无人机技术实现创新应用,例如健康娱乐.影视制作.新闻报道.环境保护.电子商务.搜索救援和科学研究等. 本周无人机开发者们迎来一个好消息,Linux基金会联合十家公司推出无人机代码计划(Dronecode Project),将为无人机开发者们提供操作系统.导航工具.飞行控制等方面的大量开源代码. 如今虽然大量无人机项目中都采用了L

开源的库RestSharp轻松消费Restful Service

现在互联网上的服务接口都是Restful的,SOAP的Service已经不是主流..NET/Mono下如何消费Restful Service呢,再也没有了方便的Visual Studio的方便生产代理的工具了,你还在用HttpWebRequest 自己封装吗?Restful Service还有授权问题,自己写出来的代码是不是很不优雅?通常Restful Service返回的数据格式是XML或者Json,还要设置服务的输入参数等等,使用起来很复杂.本文向你推荐一个开源的库RestSharp轻松消费

【原创】具有path autovivification和conversion功能的JSON库

      研究该 JSON 库的由头是因为目前开发 modb 需要支持 json 解析功能.而发现这个有意思的 项目 的地方正是在开源中国.OSChina 对该库的描述如下:  json.c 是一个小型的 C 语言的 JSON 解析库,支持路径表达式.autovivification, 和 restartable I/O. 而库的作者做了更为丰富的表述(中英对照翻译如下):  ===== json.c is a JSON C library that supports path autoviv

流式大数据实时处理技术、平台及应用

摘要:大数据处理系统根据其时效性可分为批式大数据和流式大数据两类.上述两类系统均无法满足"事中"感知查询分析处理模式的需求.为此,从分析大数据应用场景入手,提出了"流立方"流式大数据实时处理技术和平台,在完整大数据集上实现了低迟滞.高实时的即席查询分析.目前基于"流立方"平台开发的业务系统已应用到金融风控反欺诈.机器防御等领域,具有广阔的应用前景. 1.引言 大数据技术的广泛应用使其成为引领众多行业技术进步.促进效益增长的关键支撑技术.根据数据处

通用社区登陆组件技术分享(开源)中篇:OAuth 登陆组件流程及组件集成方法

上节内容:通用社区登陆组件技术分享(开源)上篇:OAuth 授权登陆介绍   本节包括以下内容: 1:第三方社区账号登陆的授权流程 2:OAuth2 组件的下载及web.config配置 3:OAuth2 组件的5行代码编写流程 4 :总结与下节内容预告     一: 第三方社区账号登陆的授权流程 1:首先从这里开始:用户进入登陆界面   2:用户点击用新浪微博或QQ登陆,系统跳到第三方授权页面,(QQ示例授权界面) 3:确定授权后,第三方跳转返回你的回调页(在应用里设置),通常仍是系统登陆页面

.NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

原文:.NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB     今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门  2.[原创]C#开源轻量级对象数据库NDatabase介绍      上面2个数据库我的实际的项目中用过,还不错.当然数据量很小,主要是客户比较变态,必须要用xml文件保存,就想到了,另外NDatabase只是自己觉得好玩,也用了