在写C#时,接触用到Json.net, 但不太会用这东东。我通过Json.net返回一个DataSet序列。部分代码如下:
using Newtonsoft.Json;string strSQL = "Select * from table Where IsUpdated = 1";
DataSet ds = MySqlHelper.ExecuteDataSet(strSQL);
string str = JsonConvert.SerializeObject(ds);
得到的结果会返回一个DataSet的序列,但我想在最后增加一个total_number的记录数在序列串里,该如何实现?望高手给个指点。

解决方案 »

  1.   

    为什么要添加总数呢?对方反序列化后会是数组或集合,比如在 JavaScript 中可以简单的通过反序列化后的值,如 data.length 取得总数。在其它的环境下也可以通过取数组或集合长度的方式获取总数。
      

  2.   

    如果你非要添加总数的话,可以通过以下的方式:
    var obj = new { datas = ds, count = 总数 };
    然后序列化 obj 就可以了。
      

  3.   

    自己添加 json.netpublic class DataSetConverter : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return typeof(DataSet).IsAssignableFrom(objectType);
        }    public override void WriteJson(JsonWriter writer, object value)
        {
            DataSet ds = (DataSet)value;
            writer.WriteStartObject();
            foreach (DataTable dt in ds.Tables)
            {
                writer.WritePropertyName(dt.TableName);
                writer.WriteStartArray();
                foreach (DataRow dr in dt.Rows)
                {
                    writer.WriteStartObject();
                    foreach (DataColumn dc in dt.Columns)
                    {
                        writer.WritePropertyName(dc.ColumnName);
                        writer.WriteValue(dr[dc].ToString());
                    }
                    writer.WriteEndObject();
                }
                writer.WriteEndArray();
            }
            writer.WriteEndObject();
        }
    }
      

  4.   

    上面做法正确,这里用了一个匿名类型。var strSQL = "Select * from table Where IsUpdated = 1";
    var ds = MySqlHelper.ExecuteDataSet(strSQL);
    var anonymousObj = new { datas = ds, count = ds.Tables[0].Rows.Count };
    var str = JsonConvert.SerializeObject(anonymousObj );
      

  5.   

    http://blog.csdn.net/fengyarongaa/article/details/7097520总结了一下
      

  6.   

    var anonymousObj = new { datas = ds, total_number = ds.Tables[0].Rows.Count };如果用的是 jquery easyui 有规定格式输入的 js ui 控件,其实也可以在客户端增加。比如:    var data = { total: 0, rows: [] };  
        var jqxhr = $.getJSON("TaskService/Tasks/All", function (json) {  
            data.rows = json;  
            data.total = json.length;

            $('#test').datagrid('loadData', data);  
        });