http://www.cnblogs.com/fmxyw/archive/2009/05/06/1450886.html
在这个贴子里有解析json字符串。不过用到JavaScriptSerializer报已经过时可以用DataContractJsonSerializer替代。求替代的详细方案,最好附上代码。谢谢

解决方案 »

  1.   

    http://space.itpub.net/12639172/viewspace-503464
      

  2.   

    http://blog.csdn.net/lee576/archive/2009/01/08/3736880.aspx
      

  3.   

    DataContractJsonSerializer _Json = new DataContractJsonSerializer(_UserPermission.GetType());
    你需要引用 System.ServiceModel.Web.dll
    和 System.RunTime.Serialization.dll这个类在System.Runtime.Serialization.Json 命名空间下
      

  4.   

    用DataContractJsonSerializer
    添加System.Runtime.Serialization.dll、System.ServiceModel.Web.dll的引用
      

  5.   

    谢谢各位大哥,关于引用什么的我都知道,简单的解析我也会,主要我如何从反序列后的对象里提取我想要data中的数据。请指教。。
      

  6.   

    问题已经解决:改造后的GeneralSearchResult:using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.IO;using System.Web.Script.Serialization;
    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Json;
    namespace WindowsFormsApplication1
    {
        public class GeneralSearchResult
        {
             public Header header = new Header();        private DataTable fieldDefine = new DataTable();        /// <summary>        /// 返回的数据结构定义,无数据        /// </summary>        public DataTable FieldDefine        {            get { return fieldDefine; }            set { fieldDefine = value; }        }         private DataTable retrunData = new DataTable();        /// <summary>        /// 返回的数据,格式为DataTable,结构和FieldDefine中的结构一样        /// </summary>        public DataTable RetrunData        {            get { return retrunData; }            set { retrunData = value; }        }         /// <summary>        /// 将json数据转换为定义好的对象,数据转换为DataTable        /// </summary>        /// <param name="jsonText"></param>        /// <returns></returns>        public static GeneralSearchResult GetTransformData(string jsonText)        {            GeneralSearchResult gsr = new GeneralSearchResult();            DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(Test));            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText.Trim()));            Test JsonData = (Test)s.ReadObject(ms);
                gsr.header.Version = JsonData.dataSet.header.version;            gsr.header.ErrorInfo = JsonData.dataSet.header.errorInfo;            gsr.header.ReturnCode = JsonData.dataSet.header.returnCode;            gsr.header.ReturnRows = Convert.ToInt16(JsonData.dataSet.header.returnRows);            gsr.header.TotalRows = Convert.ToInt16(JsonData.dataSet.header.totalRows);            
                //注意:以下列的添加不知道能不能搞成动态的,不知道把类中对象名称循环添加进去可行不,请高手指教            gsr.FieldDefine.Columns.Add("assetId");
                gsr.FieldDefine.Columns.Add("serverIdcId");
                gsr.FieldDefine.Columns.Add("InputTime");            gsr.RetrunData = gsr.FieldDefine.Clone();
                //注意:以下行的添加不知道能不能搞成动态的,不知道把类中对象循环添加进去可行不,请高手指教            foreach (row a in JsonData.dataSet.data.row)
                {
                    DataRow dr = gsr.RetrunData.NewRow();
                    dr[0] = a.AssetId;
                    dr[1] = a.ServerIdcId;
                    dr[2] = a.InputTime;
                    gsr.RetrunData.Rows.Add(dr);
                }            return gsr;        }        /// <summary>        /// 数据文件头定义        /// </summary>        public class Header        {            private string version;            /// <summary>            /// 版本            /// </summary>            public string Version            {                get { return version; }                set { version = value; }            }            private string returnCode;            /// <summary>            /// 结果码,0为正常,否则为有错误            /// </summary>            public string ReturnCode            {                get { return returnCode; }                set { returnCode = value; }            }            private string errorInfo;            /// <summary>            /// 如果ReturnCode为非0时的错误信息            /// </summary>            public string ErrorInfo            {                get { return errorInfo; }                set { errorInfo = value; }            }            private int totalRows;            /// <summary>            /// 查询结果总行数            /// </summary>            public int TotalRows            {                get { return totalRows; }                set { totalRows = value; }            }            private int returnRows;            /// <summary>            /// 返回的数据行数            /// </summary>            public int ReturnRows            {                get { return returnRows; }                set { returnRows = value; }            }        }    }
    }
      

  7.   

    添加的实体类:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;namespace WindowsFormsApplication1
    {
        [DataContract(Namespace = "WindowsFormsApplication1")]
        class Test
        {
            [DataMember(Order = 0)]
            public dataSet dataSet { get; set; }
                }    [DataContract(Namespace = "WindowsFormsApplication1")]    class dataSet
        {
             [DataMember(Order = 0)]
             public header header { get; set; }
             [DataMember(Order = 1)]
             public fieldDefine fieldDefine { get; set; }
             [DataMember(Order = 2)]
             // public List<row> row { get; set; }   
             public data data { get; set; }
        }
         [DataContract(Namespace = "WindowsFormsApplication1")]
        class header
        {
             [DataMember(Order = 0)]
             public string returnCode{get;set;}
             [DataMember(Order = 1)]
             public string errorInfo{get;set;}
             [DataMember(Order = 2)]
             public string version{get;set;}
             [DataMember(Order = 3)]
             public string totalRows{get;set;}
             [DataMember(Order = 4)]
             public string returnRows{get;set;}    }
         [DataContract(Namespace = "WindowsFormsApplication1")]
        class fieldDefine
        {
             [DataMember(Order = 0)]
             public string assetId{get;set;}
             [DataMember(Order = 1)]
             public string serverIdcId{get;set;}
             [DataMember(Order = 2)]
             public string inputTime{get;set;}    }    [DataContract(Namespace = "WindowsFormsApplication1")]
        class data
        {
             [DataMember(Order = 0)]
             public List<row> row{get;set;}
        }     [DataContract(Namespace = "WindowsFormsApplication1")]
         class row
         {
             [DataMember(Order = 0)]
             public string AssetId { get; set; }
             [DataMember(Order = 1)]
             public string ServerIdcId { get; set; }
             [DataMember(Order = 2)]
             public string InputTime { get; set; }     }
    }
      

  8.   


    //空接口
    public interface IJson
    {
    }public static class JsonHelper
    {
        public static string ToJson(this IJson source)
        {
            return ToJson(source, source.GetType());
        }    public static string ToJson(this IJson source, Type type)
        {
            DataContractJsonSerializer serilializer = new DataContractJsonSerializer(type);
            using (Stream stream = new MemoryStream())
            {
                serilializer.WriteObject(stream, source);
                stream.Flush();
                stream.Position = 0;
                StreamReader reader = new StreamReader(stream);
                return reader.ReadToEnd();
            }
        }    public static T ParseJSON<T>(this string str)
        {
            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(str)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                return (T)serializer.ReadObject(ms);
            }
        }    // 通过JSON序列化深度克隆类型
        public static T DeepClone<T>(this IJson Source) where T : IJson
        {
            string jsonString = Source.ToJson();
            return jsonString.ParseJSON<T>();
        }
    }
      

  9.   

    上面的能把这个字符串中的datat反序列化成datatable吗?我的那个是针对性的解析请指教指教。{"dataSet":{
    "header":{
        "returnCode":"0",
        "errorInfo":"HTTP请求错误",
        "version":"V1.0R010",
        "totalRows":"2000",
        "returnRows":"20"
    },
    "fieldDefine":{
        "assetId":"string",
        "serverIdcId":"int",
        "inputTime":"datetime"
    },
    "data":{"row":[
    {
        "AssetId":"TCNS2006888",
        "ServerIdcId":"1",
        "InputTime":"2008-12-12"
    },
    {
        "AssetId":"TCNS2006889",
        "ServerIdcId":"2",
        "InputTime":"2008-1-1"
    }
    ]}
    }
    }
      

  10.   

    [DataContract(Namespace = "WindowsFormsApplication1")] 
        class Test 
        { 
            [DataMember(Order = 0)] 
            public dataSet dataSet { get; set; } 
                } 
    [DataContract(Namespace = "WindowsFormsApplication1")] 这句话是什么意思啊   有什么用啊 可以不用吗
      

  11.   

    如果我是NHIBERNATE的映射.ISET的集合.怎么解析到实体类里?