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"}]}

 

當然咯,以上工具類只是我個人用的,還沒有在正式項目中驗證過,若有什么錯誤的地方歡迎指正

以上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM