• C#超精简的Json工具


      自制了一个C#使用的Json工具类,没有什么奇奇怪怪的引用库,.Net4.0以上可直接运行,适合对json解析有需求但又不需要很重视的项目使用

     话不多说,直接上代码

      1 using System.Collections.Generic;
      2 using System.Web.Script.Serialization;
      3 public class JsonHelper
      4 {
      5     public static string Serialize<T>(T t)
      6     {
      7         JavaScriptSerializer js = new JavaScriptSerializer();
      8         return js.Serialize(t);
      9     }
     10     public static T Deserialize<T>(string Json)
     11     {
     12         JavaScriptSerializer js = new JavaScriptSerializer();
     13         return js.Deserialize<T>(Json);
     14     }
     15     public static JsonBuilder CreateJsonObjectBuilder()
     16     {
     17         JsonBuilder builder = new JsonBuilder();
     18         return builder;
     19     }
     20     public static JsonBuilder CreateJsonArrayBuilder()
     21     {
     22         JsonBuilder builder = new JsonBuilder();
     23         return builder.ToArray();
     24     }
     25 }
     26 public class JsonBuilder
     27 {
     28     private JsonBuilder jsonBuilder;
     29     private Dictionary<string, object> JsonObject;
     30     private List<Dictionary<string, object>> JsonArray;
     31 
     32     public JsonBuilder()
     33     {
     34         jsonBuilder = this;
     35         JsonObject = new Dictionary<string, object>();
     36     }
     37     public JsonBuilder ToObject()
     38     {
     39         if (JsonArray != null && JsonArray.Count > 0)
     40         {
     41             JsonObject = JsonArray[0];
     42         }
     43         else
     44         {
     45             JsonArray = null;
     46             JsonObject = new Dictionary<string, object>();
     47         }
     48         return jsonBuilder;
     49     }
     50     public JsonBuilder ToArray()
     51     {
     52         JsonArray = new List<Dictionary<string, object>>();
     53         if (JsonObject.Count > 0)
     54             JsonArray.Add(JsonObject);
     55         return jsonBuilder;
     56     }
     57     public bool IsArray()
     58     {
     59         return JsonArray != null;
     60     }
     61     public JsonBuilder SetProperty(string name, object value)
     62     {
     63         if (IsArray())
     64             return jsonBuilder;
     65         if (typeof(JsonBuilder) == value.GetType())
     66         {
     67             JsonBuilder JsonValue = value as JsonBuilder;
     68             if (JsonValue.IsArray())
     69                 value = JsonValue.JsonArray;
     70             else
     71                 value = JsonValue.JsonObject;
     72         }
     73         //jsonBuilder = (IDictionary<string, object>)jsonBuilder;
     74         if (JsonObject.ContainsKey(name))
     75         {
     76             JsonObject[name] = value;
     77         }
     78         else
     79         {
     80             JsonObject.Add(name, value);
     81         }
     82 
     83         return jsonBuilder;
     84 
     85     }
     86     public JsonBuilder RemoveProperty(string name)
     87     {
     88         if (IsArray())
     89             return jsonBuilder;
     90         if (JsonObject.ContainsKey(name))
     91         {
     92             JsonObject.Remove(name);
     93         }
     94         return jsonBuilder;
     95     }
     96     public JsonBuilder AddItem(JsonBuilder jb)
     97     {
     98         if (!IsArray())
     99             return jsonBuilder;
    100         if (jb.IsArray())
    101             JsonArray.AddRange(jb.JsonArray);
    102         else
    103             JsonArray.Add(jb.JsonObject);
    104         return jsonBuilder;
    105     }
    106     public JsonBuilder RemoveItem(JsonBuilder jb)
    107     {
    108         if (!IsArray())
    109             return jsonBuilder;
    110         if (jb.IsArray())
    111         {
    112             foreach (var deleItem in jb.JsonArray)
    113             {
    114                 if (JsonArray.Contains(deleItem))
    115                     JsonArray.Remove(deleItem);
    116             }
    117         }
    118         else
    119         {
    120             if (JsonArray.Contains(jb.JsonObject))
    121                 JsonArray.Remove(jb.JsonObject);
    122         }
    123         return jsonBuilder;
    124     }
    125     public string ToJson()
    126     {
    127         object ToSerialize;
    128         if (IsArray())
    129             ToSerialize = jsonBuilder.JsonArray;
    130         else
    131             ToSerialize = jsonBuilder.JsonObject;
    132         return JsonHelper.Serialize<dynamic>(ToSerialize);
    133     }
    134 }
    View Code

    下面是测试,受Unity中DoTween动画插件的启发,设计了这种链式开火车的API,用起来可是十分优雅

    1 JsonBuilder json = JsonHelper.CreateJsonObjectBuilder();
    2 JsonBuilder array = JsonHelper.CreateJsonArrayBuilder();
    3 array.AddItem(new JsonBuilder().SetProperty("item1","item1__value"));
    4 array.AddItem(new JsonBuilder().SetProperty("item2","item2__value"));
    5 json = json.SetProperty("name", "Zack").SetProperty("blog","cnblogs").SetProperty("obj", (new JsonBuilder().SetProperty("value", 1000))).SetProperty("array", array);
    6 Console.WriteLine(json.ToJson());
    7 Console.ReadLine();

    结果:

    {"name":"Zack","blog":"cnblogs","obj":{"value":1000},"array":[{"item1":"item1__value"},{"item2":"item2__value"}]}

    当然咯,以上工具类只是我个人用的,还没有在正式项目中验证过,若有什么错误的地方欢迎指正

    以上。

  • 相关阅读:
    在CMD中使用for命令对单行字符串做分割的方法
    关于CMD/DOS中的短文件名规则
    [批处理]全盘搜索批量文件
    [批处理]批量提取MKV资源
    关于CMD中延迟环境变量嵌套的实现方法
    [批处理]自动按日期重命名文件名
    [批处理]手动伪造相机自动编号
    [批处理]简易命令行RAR
    [批处理]Oracle启动助手
    [批处理]强制删除文件及文件夹
  • 原文地址:https://www.cnblogs.com/Zackzhang/p/13114595.html
Copyright © 2020-2023  润新知