最新C# Object与json互转
2016-07-20 20:19
411 查看
在网上搜索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中该方法已经过期,所以还是会报找不到的错误。解决方案,在最上面。
首先奉上调试正常可用的,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中该方法已经过期,所以还是会报找不到的错误。解决方案,在最上面。
相关文章推荐
- python运行不了 AttributeError: module object has no attribute getdefaultlocale
- Java类的共同父类Object
- Scala 学习笔记(二)— Everything is an object
- scala class和object的区别
- Scala之旅-class和object详解
- TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement
- [精通Objective-C]键值编程
- Object 对象方法学习之(1)—— 使用 Object.assign 复制对象、合并对象
- CSS3 Object-fit和Object-position
- @synthesize myObject=_myObject的理解
- (转译)Objective-C的动态特性 runtime
- java实现map和object互转的三种方法
- on a null object reference 问题的解决办法
- JSONObject与JSONArray的使用
- 常用的正则表 4000 达式
- 05 OC之 集合 Set的使用
- 仿滴滴抢单倒计时的Demo
- NSObject的load和initialize方法(转)
- 关于对数组和指针的测试与分析OC
- Visual Object Tracking using Adaptive Correlation Filters (MOSSE)论文笔记