引用:System.Runtime.Serialization

/*
今天新开的一个项目突然发现引用System.Runtime.Serialization.Json 提示 命名空间 不存在类型或命名空间名称 json
明明前段时间刚开发的WCF是很正常的引用的,认真比照了引用的文件位置是一样的,记得前段时间在CSDN上也有人抱怨看不到System.Runtime.Serialization.Json

后面发现
首先,当然是项目是3.5的,
只引用一个System.Runtime.Serialization 是不够的,
还要添加 
 * System.ServiceModel
 * System.ServiceModel.Web
的引用,OK
System.Runtime.Serialization.Json 出来了,可以开始对JSON字符串转为实体了。
命名空间 不存在类型或命名空间名称 json
 */

实体

public class Member
{
    public int? id { get; set; }
    public bool isck { get; set; }
    public string name { get; set; }
    public DateTime? logintime { get; set; }
    public double? price { get; set; }
}

调用

//实例化JsonHelper
JsonHelper _JsonHelper = new JsonHelper();

//实体赋值
Member MemberModel = new Member()
{
    id = 1,
    isck = false,
    name = "guoxianjun",
    logintime = DateTime.Now,
    price = 1000
};
//[T→Json结果]
string sb = _JsonHelper.SerializeToJson(MemberModel);

//json字符串
string json_member_model = "{\"id\":1,\"isck\":false,\"logintime\":\"2013-03-29 15:12:18\",\"name\":\"guoxianjun\",\"price\":1000}";
//[Json→T结果]
Member table_model = _JsonHelper.DeserializeToObj(json_member_model);

其他案例

member memberentity = new member()
{
    m_id = 1,
    m_name = "m用户名",
    userentity = new user()
    {
        u_id = 2,
        u_name = "u用户名"
    }
};
string USERJSON = ComMvcNet.Comm.Extends.JsonHelper.SerializeToJson(memberentity);

string S = "{ \"ppcs_cardsingleactive_add_response\": { \"brand_id\": \"0001\", \"card_id\": 8686860210000003380, \"init_value\": \"100.00\", \"order_id\": \"0000000001\", \"trans_no\": \"0000012979\" } } ";
ppcs_cardsingleactive_add_responseentiy mofn = ComMvcNet.Comm.Extends.JsonHelper.DeserializeToObj(S);

string u = "{ \"ppcs_cardsingletopup_add_response\": { \"order_id\": \"0000000001\", \"trans_no\": \"0000013559\", \"result_info\": { \"card_id\": 8686860210000003231, \"prdt_no\": \"0001\", \"amount\": \"300.00\", \"top_up_way\": 1, \"desn\": \"test -desn\", \"account_balance\": \"29900.20\", \"valid_balance\": \"29900.20\", \"validity_date\": 20111028 } } } ";

ppcs_cardsingletopup_add_responseentity mofcn = ComMvcNet.Comm.Extends.JsonHelper.DeserializeToObj(u);

public class ppcs_cardsingletopup_add_responseentity
{
    public ppcs_cardsingletopup_add_response ppcs_cardsingletopup_add_response { get; set; }

}

public class ppcs_cardsingletopup_add_response
{
    public string order_id { get; set; }
    public string trans_no { get; set; }
    public result_info result_info { get; set; }
}
public class result_info
{   
    public string card_id { get; set; }
    public string prdt_no { get; set; }
    public double amount { get; set; }
    public int? top_up_way { get; set; }
    public string desn { get; set; }
    public double account_balance { get; set; }
    public double valid_balance { get; set; }
    public string validity_date { get; set; }

}

public class ppcs_cardsingleactive_add_responseentiy
{
    public ppcs_cardsingleactive_add_response ppcs_cardsingleactive_add_response { get; set; }

}
public class ppcs_cardsingleactive_add_response
{
    public string brand_id { get; set; }
    public string card_id { get; set; }
    public double init_value { get; set; }
    public string order_id { get; set; }
    public string trans_no { get; set; }
}

//[Serializable]
public class member
{
    public int? m_id { get; set; }
    public string m_name { get; set; }
    public user userentity { get; set; }
}
//[Serializable]
public class user
{
    public int? u_id { get; set; }
    public string u_name { get; set; }
}

T→Json或Json→T方法

using System;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text.RegularExpressions;
using System.Text;

public class JsonHelper
{
    #region T→Json
    public string SerializeToJson(T t)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            ser.WriteObject(ms, t);

            string jsonString = Encoding.UTF8.GetString(ms.ToArray());
            string p = @"\\/Date\((\d+)\+\d+\)\\/";
            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
            Regex reg = new Regex(p);
            jsonString = reg.Replace(jsonString, matchEvaluator);
            //如果是数组

            if (jsonString.StartsWith("[") && jsonString.EndsWith("]"))
            {
                string name = t.GetType().Name;
                if (t is System.Collections.ArrayList)
                {
                    string[] arr = name.Split(new string[] { "[]" }, StringSplitOptions.None);
                    if (arr.Length > 0) name = arr[0] + "s";
                }
                else if (t is System.Collections.IList)
                {
                    System.Collections.IList list = (System.Collections.IList)t;
                    name = list[0].GetType().Name + "s";
                }
                jsonString = "{\"" + name + "\":" + jsonString + "}";
            }
            return jsonString;
        }
    }
    #endregion

    #region Json→T
    public T DeserializeToObj(string jsonString)
    {
        //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式
        string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
        MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
        Regex reg = new Regex(p);
        jsonString = reg.Replace(jsonString, matchEvaluator);
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            T obj = (T)ser.ReadObject(ms);
            return obj;
        }
    }
    #endregion

    #region 时间转换
    private string ConvertJsonDateToDateString(Match m)
    {
        string result = string.Empty;
        DateTime dt = new DateTime(1970, 1, 1);
        dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
        dt = dt.ToLocalTime();
        result = dt.ToString("yyyy-MM-dd HH:mm:ss");
        return result;
    }

    private string ConvertDateStringToJsonDate(Match m)
    {
        string result = string.Empty;
        DateTime dt = DateTime.Parse(m.Groups[0].Value);
        dt = dt.ToUniversalTime();
        TimeSpan ts = dt - DateTime.Parse("1970-01-01");
        result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);
        return result;
    }
    #endregion
}

全部代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Text.RegularExpressions;
using System.Runtime.Serialization.Json;

namespace ComMvcNet.Comm.Extends
{
    public static class Extends
    {
        #region 转换成URL参数
        /// <summary>
        /// 转换成URL参数
        /// </summary>
        /// <param name="dictionary"></param>
        /// <returns></returns>
        public static string ToQueryString(this IDictionary<object, object> dictionary)
        {
            var sb = new StringBuilder();
            foreach (var key in dictionary.Keys)
            {
                var value = dictionary[key];
                if (value != null)
                {
                    sb.Append(key + "=" + value + "&");
                }
            }
            return sb.ToString().TrimEnd('&');
        }

        public static string ToQueryString(this IList<object> list, string key)
        {
            var sb = new StringBuilder();
            foreach (var val in list)
            {
                if (val != null)
                {
                    sb.Append(key + "=" + Uri.EscapeDataString(val.ToString()) + "&");
                }
            }
            return sb.ToString().TrimEnd('&').Substring(key.Length + 1);
        }
        #endregion

        #region Json/Xml转换对象
        public static T ToEntity<T>(this string str) where T : class
        {
            return ToEntity<T>(str, "json");
        }

        public static T ToEntity<T>(this string str, object format) where T : class
        {
            T t = default(T);
            switch (format.ToString())
            {
                case "xml":
                    {
                        t = XmlHelper.Deserialize<T>(str);
                        break;
                    }
                case "json":
                default:
                    {
                        t = JsonHelper.DeserializeToObj<T>(str);
                        break;
                    }
            }
            return t;
        }
        #endregion

        #region 格林威治时间→DateTime
        public static DateTime ToDateTime(this string time)
        {
            return DateTime.ParseExact(time, "ddd MMM dd HH:mm:ss zzz yyyy", System.Globalization.CultureInfo.InvariantCulture);
        }
        #endregion

        #region 字符串格式化
        public static string ToFormat(this string str, params object[] args)
        {
            return string.Format(str, args);
        }
        #endregion
    }

    public class XmlHelper
    {
        #region XML→T
        public static T Deserialize<T>(string xml)
        {
            if (typeof(T).IsGenericType)
            {
                return DeserializeToEntityList<T>(xml);
            }
            else
            {
               return DeserializeToEntity<T>(xml);
            }
        }
        #endregion

        #region XML→T(单例)
        private static T DeserializeToEntity<T>(string xml)
        {
            using (StringReader reader = new StringReader(xml))
            {
                XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
                T obj = (T)xs.Deserialize(reader);
                return obj;
            }
        }
        #endregion

        #region XML→T(列表)
        private static IList<T> DeserializeToList<T>(string xml)
        {
            XmlDocument document = new XmlDocument();
            document.LoadXml(xml);
            string nodeName = typeof(T).Name.ToLower();
            IList<T> list = new List<T>();
            foreach (XmlNode node in document.GetElementsByTagName(nodeName))
            {
                list.Add(Deserialize<T>(node.OuterXml));
            }
            return list;
        }

        private static T DeserializeToEntityList<T>(string xml)
        {
            var method = typeof(XmlHelper).GetMethod("DeserializeToList", System.Reflection.BindingFlags.NonPublic| System.Reflection.BindingFlags.Static).MakeGenericMethod(typeof(T).GetGenericArguments()[0]);
            return (T)method.Invoke(null, new object[] { xml });            
        }
        #endregion 

        #region T→XML
        public static string Serialize<T>(T obj)
        {
            string xmlString = string.Empty;
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
            using (MemoryStream ms = new MemoryStream())
            {
                xmlSerializer.Serialize(ms, obj);
                xmlString = Encoding.UTF8.GetString(ms.ToArray());
            }
            return xmlString;
        }
        #endregion
    }

    public class JsonHelper
    {
        #region T→Json
        public static string SerializeToJson<T>(T t)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
                ser.WriteObject(ms, t);

                string jsonString = Encoding.UTF8.GetString(ms.ToArray());
                string p = @"\\/Date\((\d+)\+\d+\)\\/";
                MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
                Regex reg = new Regex(p);
                jsonString = reg.Replace(jsonString, matchEvaluator);
                //如果是数组

                if (jsonString.StartsWith("[") && jsonString.EndsWith("]"))
                {
                    string name = t.GetType().Name;
                    if (t is System.Collections.ArrayList)
                    {
                        string[] arr = name.Split(new string[] { "[]" }, StringSplitOptions.None);
                        if (arr.Length > 0) name = arr[0] + "s";
                    }
                    else if (t is System.Collections.IList)
                    {
                        System.Collections.IList list = (System.Collections.IList)t;
                        name = list[0].GetType().Name + "s";
                    }
                    jsonString = "{\"" + name + "\":" + jsonString + "}";
                }
                return jsonString;
            }
        }
        #endregion

        #region Json→T
        public static T DeserializeToObj<T>(string jsonString)
        {
            //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式
            string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
            Regex reg = new Regex(p);
            jsonString = reg.Replace(jsonString, matchEvaluator);
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
                T obj = (T)ser.ReadObject(ms);
                return obj;
            }
        }
        #endregion

        #region 时间转换
        private static string ConvertJsonDateToDateString(Match m)
        {
            string result = string.Empty;
            DateTime dt = new DateTime(1970, 1, 1);
            dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
            dt = dt.ToLocalTime();
            result = dt.ToString("yyyy-MM-dd HH:mm:ss");
            return result;
        }

        private static string ConvertDateStringToJsonDate(Match m)
        {
            string result = string.Empty;
            DateTime dt = DateTime.Parse(m.Groups[0].Value);
            dt = dt.ToUniversalTime();
            TimeSpan ts = dt - DateTime.Parse("1970-01-01");
            result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);
            return result;
        }
        #endregion
    }
}
Copyright © 2013-2021 版权所有 蜀ICP备14018279号