在做项目中使用EF时,发现DataContractJsonSerializer对EF中的实体,无论是接口or实现类进行序列化时,都会报:
{"The type 'XXXXXXXXXX' cannot be serialized to JSON because its IsReference setting is 'True'. The JSON format does not support references because there is no standardized format for representing references. To enable serialization, disable the IsReference setting on the type or an appropriate parent class of the type."}
网上看了一下解决方案:http://www.cnblogs.com/zhaojin/archive/2011/02/12/1952804.html
上说了一下,所以对
DataContractJsonSerializer和JavaScriptSerializer 都简单写一个(代码最直接,上代码)
一、DataContractJsonSerializer
引用System.Runtime.Serialization.dll
/// <summary>
/// 序列化对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static string Serializer<T>(this T t)
{
string serialization = string.Empty;
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (var memoryStream = new MemoryStream())
{
serializer.WriteObject(memoryStream, t);
serialization = Encoding.UTF8.GetString(memoryStream.ToArray());
}
return serialization;
}
/// <summary>
/// 反序列化json到对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T Deserializer<T>(this string json) where T : class
{
if (!string.IsNullOrEmpty(json))
{
T obj = null;
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
obj = serializer.ReadObject(memoryStream) as T;
}
return obj;
}
return null;
}
二、JavaScriptSerializer
引用System.Web.Extensions.dll
/// <summary>
/// 解决EF实体的序列化问题
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static string ScriptSerialize<T>(this T t)
{
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize(t);
}
public static T ScriptDeserialize<T>(this string strJson)
{
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Deserialize<T>(strJson);
}
分享到:
相关推荐
一个c#的json序列化和反序列化类,调用很简单
C#或.net json序列化反序列化,适用于与第三方系统做接口用,实体自动转json字符串,json自动转视图
C#-JSON序列化和反序列化辅助类
C# 后台序列化Json序列、反序列化Json序列(三种方法)
Json序列化与反序列化
Json序列化和反序列化代码,写的不好,请多指教,用C#语言
c#json序列化与反序列化.doc
在unity用于json的序列化和反序列化插件(适用语言c#) 配合教程参见我的“unity/c#解析json”
C# JSON 序列化源码 //源码来源: CodeBetter.Json //修改说明: 修正几个错误,加入字典的反序列化 //技术联系: yandefu@163.com 如果使用中有问题,或者有修改升级有空通知一下
C#中二进制数组h和各种常规数组的转换,二进制序列化和json序列化方法以及对应的反序列化方法的例子,帮助初学者。
c#两种简单的json类和对象的序列化和解析。一种使用Hashtable序列化和解析;一种使用实体类序列化和解析。需要借助第三方Newtonsoft.Json.dll。
.net 序列化和反序列化Json,目前在.net 3.5之前序列化json用的Newtonsoft.dll,不过3.5之后包括3.5,可以使用.net自带方法,详见压缩包内文件。
利用JSON.NET制作的,对JSON文本进行序列化和反序列化操作的类,可反序列化成实体类或Dictionary,也可从类或Dictionary序列化成JSON文本
json反序列化、快速有效的取出多层嵌套的对象
c# 使用Json.NET实现json序列化.docx
C# 序列化 xml soap json binary
所有在反序列化Json字符串时需要一种通用的转换方式,而不是写死的某个类的反序列化,这里介绍的一种思路就是使用dynamic关键字来实现通用反序列化并比较反序列化后的对象是否深度相等即比较对象的各个字段是否相等...
利用.Net FrameWork3.5提供的Json库实现C#与Json数据转换时,对于Datetime类型的数据,生成格式如下数据 /Date(10000000000-0700)/ 不直观,同时相当部分js库无法直接使用.利用正则表达式替换成"yyyy-MM-dd HH:mm:ss...
主要介绍了C#实现的json序列化和反序列化代码实例,本文讲解了两种实现方法,并直接给出代码示例,需要的朋友可以参考下