zoukankan      html  css  js  c++  java
  • 一个.NET通用JSON解析/构建类的实…

    一个.NET通用JSON解析/构建类的实现(c#)

    在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将试图提供一个高度灵活的JSON通用类型(JsonObject),实现对JSON的解析及序列化。

    假设JSON对象内容如下:

    隐藏行号 复制代码 JSON
    1. {
      
    2.     orders: {
      
    3.         date: '21:31:59',
      
    4.         name: 'Xfrog',
      
    5.         books: [{
      
    6.             name: 'C# 网络核心编程',
      
    7.             publish: '2010-3-24'
      
    8.         }, {
      
    9.             name: 'C#入门经典中文版',
      
    10.             publish: '2009-10-16'
      
    11.         }]
      
    12.     },
      
    13.     blog: 'http://www.cnblogs.com/xfrog'
      
    14. }
      

    使用JsonObject来构建,可选择以下三种方式:
    方式一:

    隐藏行号 复制代码 C#
    1. //通过标准构造函数
      
    2. JsonObject json = new JsonObject();
      
    3. json["orders"] = new JsonProperty(new JsonObject());
      
    4. json["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
      
    5. JsonObject config = json.Properties<<SPAN style="COLOR: rgb(43,145,175)">JsonObject>("orders");
      
    6. json["orders"]["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
      
    7. json["orders"]["name"] = new JsonProperty("Xfrog");
      
    8. json["orders"]["books"] = new JsonProperty();
      
    9. JsonProperty book = json["orders"]["books"].Add(new JsonObject());
      
    10. book["name"] = new JsonProperty("C# 网络核心编程");
      
    11. book["publish"] = new JsonProperty("2010-3-24");
      
    12. book = json["orders"]["books"].Add(new JsonObject());
      
    13. book["name"] = new JsonProperty("C#入门经典中文版");
      
    14. book["publish"] = new JsonProperty("2009-10-16");
      


    方式二:

    隐藏行号 复制代码 C#
    1. //通过回调函数简化对象的构建
      
    2. JsonObject json2 = new JsonObject((a) =>
      
    3. {
      
    4.     a["orders"] = new JsonProperty(new JsonObject((b) =>
      
    5.     {
      
    6.         b["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
      
    7.         b["name"] = new JsonProperty("Xfrog");
      
    8.         b["books"] = new JsonProperty();
      
    9.         b["books"].Add(new JsonObject((c) =>
      
    10.         {
      
    11.             c["name"] = new JsonProperty("C# 网络核心编程");
      
    12.             c["publish"] = new JsonProperty("2010-3-24");
      
    13.         }));
      
    14.         b["books"].Add(new JsonObject((c) =>
      
    15.         {
      
    16.             c["name"] = new JsonProperty("C#入门经典中文版");
      
    17.             c["publish"] = new JsonProperty("2009-10-16");
      
    18.         }));
      
    19.     }));
      
    20.     a["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
      
    21. });
      

    方式三:

    隐藏行号 复制代码 C#
    1. //通过字符串构建Json对象
      
    2. JsonObject newObj = new JsonObject(jsonStr);
      


    获取Json对象属性值的方法,也有三种方式:

    隐藏行号 复制代码 C#
    1. //通过泛型函数
      
    2. Console.WriteLine(newObj["orders"].GetValue<<SPAN style="COLOR: rgb(43,145,175)">JsonObject>()["books"].GetValue<<SPAN style="COLOR: rgb(43,145,175)">List<<SPAN style="COLOR: rgb(43,145,175)">JsonProperty>>()[1].GetValue<<SPAN style="COLOR: rgb(43,145,175)">JsonObject>()["name"].Value);
      
    3. //通过属性类型对应的属性
      
    4. Console.WriteLine(newObj["orders"].Object["books"].Items[1].Object["name"].Value);
      
    5. //如果属性为对象类型,可通过字符串索引简化
      
    6. Console.WriteLine(newObj["orders"]["books"][1]["name"].Value);
      

    直接使用ToString函数,将JsonObject转换为Json字符串:

    隐藏行号 复制代码 C#
    1. String jsonStr = json.ToString();
      

    注意:

    我在重载ToString函数时,并没有将字符串转换为JavsScript字符串类型(即对需要转义的字符的处理),当然,要实现也是极其简单的。另外,对于带String参数的ToString,我也为做特殊处理,感兴趣的朋友可自行实现。

    Technorati 标签: .NET,JSON,C#

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    【性能测试】二、TPS、QPS、RT和吞吐量这些都是什么?
    【性能测试】一、哪那么多概念,不就是这一条吗?
    【测试基础】九、如何做 API 测试?异步的呢?
    【测试基础】八、创建测试数据的时机
    【测试基础】七、你如何准备测试数据?
    【测试基础】六、做好测试计划需要注意这些
    【测试基础】五、这样提bug单,开发小哥还会怼你么?
    【测试基础】四、你的测试覆盖率是多少?
    【测试基础】三、为什么要做自动化测试?哪种项目合适?
    【测试基础】二、我好像真的不会设计“好的”测试用例
  • 原文地址:https://www.cnblogs.com/jamesf/p/4751650.html
Copyright © 2011-2022 走看看