asp.net的JSONHelper 类

调用方法:
JSONHelper json = new JSONHelper();

json.success 
= true;

json.AddItem(
"aid""1");

json.ItemOk();

json.totlalCount
=10;

string jsons = "";
if (json.totlalCount > 0)
{
    jsons 
= json.ToString();
}
else
{
    jsons 
= @"{success:false}";
}
return jsons;
JSONHelper.cs
public class JSONHelper
{
    
//对应JSON的singleInfo成员
    public string singleInfo = string.Empty;

    
protected string _error = string.Empty;
    
protected bool _success = true;
    
protected long _totalCount = 0;
    
protected System.Collections.ArrayList arrData = new ArrayList();
    
protected System.Collections.ArrayList arrDataItem = new ArrayList();

    
public JSONHelper()
    {
        
//
        
//TODO: 在此处添加构造函数逻辑
        
//
    }

    
//对应于JSON的success成员
    public bool success
    {
        
get
        {
            
return _success;
        }
        
set
        {
            
//如设置为true则清空error
            if (success) _error = string.Empty;
            _success 
= value;
        }
    }

    
//对应于JSON的error成员
    public string error
    {
        
get
        {
            
return _error;
        }
        
set
        {
            
//如设置error,则自动设置success为false
            if (value != "") _success = false;
            _error 
= value;
        }
    }

    
public long totlalCount
    {
        
get { return _totalCount; }
        
set { _totalCount = value; }
    }


    
//重置,每次新生成一个json对象时必须执行该方法
    public void Reset()
    {
        _success 
= true;
        _error 
= string.Empty;
        singleInfo 
= string.Empty;
        arrData.Clear();
        arrDataItem.Clear();
    }



    
public void AddItem(string name, string value)
    {
        arrData.Add(
"/"" + name + "/":" + "/"" + value + "/"");
    }



    
public void ItemOk()
    {
        arrData.Add(
"<BR>");
        
//返回总记录条数
        totlalCount++;
    }

    
//序列化JSON对象,得到返回的JSON代码
    public override string ToString()
    {
        StringBuilder sb 
= new StringBuilder();
        sb.Append(
"{");
        sb.Append(
"/"totalCount/":/"" + _totalCount.ToString() + "/",");
        sb.Append(
"/"success/":" + _success.ToString().ToLower() + ",");
        sb.Append(
"/"error/":/"" + _error.Replace("/"""///"") + "/",");
        sb.Append(
"/"data/":[");

        
int index = 0;
        sb.Append(
"{");
        
if (arrData.Count <= 0)
        {
            sb.Append(
"}");
        }
        
else
        {
            
foreach (string val in arrData)
            {
                index
++;

                
if (val != "<BR>")
                {
                    sb.Append(val 
+ ",");
                }
                
else
                {
                    sb 
= sb.Replace(",""", sb.Length - 11);
                    sb.Append(
"},");
                    
if (index < arrData.Count)
                    {
                        sb.Append(
"{");
                    }
                }

            }
            sb 
= sb.Replace(",""", sb.Length - 11);
            sb.Append(
"]");
        }

        sb.Append(
"}");
        
return sb.ToString();
    }

    
public string ToSingleString()
    {
        StringBuilder sb 
= new StringBuilder();
        sb.Append(
"{");

        sb.Append(
"success:" + _success.ToString().ToLower() + ",");

        sb.Append(
"data:");

        
int index = 0;
        sb.Append(
"{");
        
if (arrData.Count <= 0)
        {
            sb.Append(
"}");
        }
        
else
        {
            
foreach (string val in arrData)
            {
                index
++;

                
if (val != "<BR>")
                {
                    sb.Append(val 
+ ",");
                }
                
else
                {
                    sb 
= sb.Replace(",""", sb.Length - 11);
                    sb.Append(
"},");
                    
if (index < arrData.Count)
                    {
                        sb.Append(
"{");
                    }
                }

            }
            sb 
= sb.Replace(",""", sb.Length - 11);
            sb.Append(
"");
        }

        sb.Append(
"}");
        
return sb.ToString();
    }
}
url:http://greatverve.cnblogs.com/archive/2011/07/06/asp-net-jsonhelper.html
.NET通用JSON解析/构建类的实现(c#)

在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将试图提供一个高度灵活的JSON通用类型(JsonObject),实现对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来构建,可选择以下三种方式: 
方式一:


  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<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"); 

方式二:


  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. }); 

方式三:


  1. //通过字符串构建Json对象 
  2. JsonObject newObj = new JsonObject(jsonStr); 

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


  1. //通过泛型函数 
  2. Console.WriteLine(newObj["orders"].GetValue<JsonObject>()["books"].GetValue<List<JsonProperty>>()[1].GetValue<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字符串:


  1. String jsonStr = json.ToString(); 

注意:

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

posted @ 2011-07-06 10:34  大气象  阅读(11619)  评论(10编辑  收藏  举报
http://www.tianqiweiqi.com