最新C# Object與json互轉

分類:編程 時間:2016-11-06
[摘要:正在網上搜刮C# Object取json互轉,首要有兩種計劃,然則發明皆弗成用。 起首送上調試一般可用的,net framework4.0,減上響應的dll庫:Newtonsoft.Json.dll using Core.Bases]

在網上搜索C# Object與json互轉,主要有兩種方案,但是發現都不可用。


首先奉上調試正常可用的,net framework4.0,加上相應的dll庫:Newtonsoft.Json.dll

using Core.Bases;
using Newtonsoft.Json;
using system;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;


namespace Core.Text
{
    public class JsonTools
    {

        // 從一個對象信息生成Json串
        public static string ObjectToJson(object obj)
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
        }
        // 從一個Json串生成對象信息
        public static object JsonToObject(string jsonString, object obj)
        {
            return Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString, obj.GetType());
        }
    }
}


網上主要方案一:

public static APIResponse<T> GetResponse<T>(string str)
        {

            StringReader sr = new StringReader(str);
            JsonSerializer serializer = new JsonSerializer();
            return (APIResponse<T>)serializer.Deserialize(new JsonTextReader(sr), typeof(APIResponse<T>));
        }

        /// <summary>
        /// 生成Json格式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string GetJson(object obj)
        {
            if (obj == null)
                return "";

            DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
            using (MemoryStream stream = new MemoryStream())
            {
                json.WriteObject(stream, obj);
                string szJson = Encoding.UTF8.GetString(stream.ToArray());
                return szJson;
            }
        }
        /// <summary>
        /// 獲取Json的Model
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="szJson"></param>
        /// <returns></returns>
        public static T ParseFromJson<T>(string szJson)
        {
            if (typeof(T) == typeof(IEnumerable<>))
            {

            }
            T obj = Activator.CreateInstance<T>();
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
                return (T)serializer.ReadObject(ms);
            }
        }

        /// <summary>
        /// 獲取Json的Model
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="szJson"></param>
        /// <returns></returns>
        public static IEnumerable<T> ParseListFromJson<T>(string szJson)
        {
            JavaScriptSerializer jss = new javascriptSerializer();
            return jss.Deserialize<List<T>>(szJson);

            //T obj = Activator.CreateInstance<T>();
            //using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
            //{
            //    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
            //    return (T)serializer.ReadObject(ms);
            //}
        }

這種方案運行出來字符串如下:

"{\"<CHardDiskFreeSpace>k__BackingField\":0,\"<CHardDiskSpace>k__BackingField\":0,\"<ConfigId>k__BackingField\":0,\"<CoreNumber>k__BackingField\":4,\"<CpuUsage>k__BackingField\":15.6384974,\"<DHardDiskFreeSpace>k__BackingField\":0,\"<DHardDiskSpace>k__BackingField\":0,\"<DiskRead>k__BackingField\":11.9906368,\"<DiskWrite>k__BackingField\":29.7924538,\"<ItemId>k__BackingField\":0,\"<MemoryAvailable>k__BackingField\":874,\"<MemoryTotal>k__BackingField\":8092,\"<NetworkReceive>k__BackingField\":0.268140942,\"<NetworkSend>k__BackingField\":0.471894622}"

不符合要求


方案二:

 // 從一個對象信息生成Json串
        public static string ObjectToJson(object obj)
        {
           return JavaScriptConvert.SerializeObject(obj);
        }
        // 從一個Json串生成對象信息
        public static object JsonToObject(string jsonString, object obj)
        {
           return JavaScriptConvert.DeserializeObject(jsonString, obj.GetType());
        }

雖然已經引入Newtonsoft.Json.dll,但是由於net4.0中該方法已經過期,所以還是會報找不到的錯誤。解決方案,在最上面。



Tags: Object public return 計劃 網上

文章來源:


ads
ads

相關文章
ads

相關文章

ad