在網上搜索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 計劃 網上
文章來源: