System.Runtime.Serialization.SerializationException”类型的未经处理的异常在 System.Runtime.Serialization.dll 中发生
异常信息:
“System.Runtime.Serialization.SerializationException”类型的未经处理的异常在 System.Runtime.Serialization.dll 中发生
其他信息: 不应为数据协定名称为“Teacher:http://schemas.datacontract.org/2004/07/ConsoleApplication3”的类型“ConsoleApplication3.Teacher”。请考虑使用 DataContractResolver,或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 特性,或者将未知类型添加到传递给 DataContractSerializer 的已知类型列表。
想要序列化的对象:
public class Student : People
{
public Int32 Age { get; set; }
}
public abstract class People
{
public string Name { get; set; }
public string Address { get; set; }
}
序列化的方法:
public static string WriteJson<T>(T t)
{
using (MemoryStream ms = new MemoryStream())
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject(ms, t);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
方法调用:
People p = new Student()
{
Name = "小明",
Address = "章丘路110号",
Age =
}; string jsonString = WriteJson<People>(p);
Console.WriteLine(jsonString);
然后就有了上面的异常
根据异常可以知道,虽然Student继承了People类,但是序列化的时候是People类型,也就是说序列化的时候并不知道 想要序列化的对象(Student类型),故产生了异常;根据异常提示,有两种解决方案:考虑使用 DataContractResolver,或将任何未知类型以静态方式添加到已知类型的列表。
经过了MSDN一番查询后,得到了两种可以序列化继承关系的对象的方法,
方式一,继承DataContractResolver类来实现:
public abstract class Animal
{
public string Name { get; set; }
} public class Bird : Animal
{
public string Color { get; set; }
public Feather BDeather { get; set; }
} public class Feather
{
public string Color { get; set; }
}
public static string WriteJson<T>(T t)
{
using (MemoryStream ms = new MemoryStream())
{
Assembly assembly = Assembly.Load(new AssemblyName("ConsoleApplication3"));
DataContractSerializer serializer = new DataContractSerializer(typeof(T), null, Int32.MaxValue, false, true, null, new MyDataContractResolver(assembly));
serializer.WriteObject(ms, t);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
Animal animal = new Bird()
{
Name = "鸭子",
Color = "白色",
BDeather = new Feather() { Color="纯白色"}
};
string jsonString = WriteJson<Animal>(animal);
Console.WriteLine(jsonString);
public class MyDataContractResolver : DataContractResolver
{ private XmlDictionary dictionary = new XmlDictionary();
Assembly assembly;
public MyDataContractResolver(Assembly assembly)
{
this.assembly = assembly;
}
public override Type ResolveName(string typeName, string typeNamespace, Type declaredType, DataContractResolver knownTypeResolver)
{
Type type = knownTypeResolver.ResolveName(typeName, typeNamespace, declaredType, knownTypeResolver);
if (type == null)
{
type = Type.GetType(typeName + ", " + typeNamespace);
}
return type;
} public override bool TryResolveType(Type type, Type declaredType, DataContractResolver knownTypeResolver, out XmlDictionaryString typeName, out XmlDictionaryString typeNamespace)
{
knownTypeResolver.TryResolveType(type, declaredType, knownTypeResolver, out typeName, out typeNamespace);
if (typeName == null || typeNamespace == null)
{
XmlDictionary dictionary = new XmlDictionary();
typeName = dictionary.Add(type.FullName);
typeNamespace = dictionary.Add(type.Assembly.FullName);
}
return true;
}
}
输出结果:
方式二,通过KnownTypeAttribute添加识别类型:
[KnownType(typeof(Student))]
[KnownType(typeof(Teacher))]
[KnownType(typeof(Pupil))]
[DataContract]
public abstract class People
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Address { get; set; }
}
public class Student : People
{ public Int32 Age { get; set; }
} public class Pupil : Student
{ }
public class Teacher : People
{
public Course T_course { get; set; }
} public class Course
{
public string Name { get; set; }
public int Times { get; set; }
}
输出结果:
aaarticlea/png;base64,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" alt="" />
关于更详细的描述,请参考以下MSDN的内容:
http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.knowntypeattribute.aspx
http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datacontractserializer%28v=vs.110%29.aspx
System.Runtime.Serialization.SerializationException”类型的未经处理的异常在 System.Runtime.Serialization.dll 中发生的更多相关文章
- “System.InvalidOperationException”类型的未经处理的异常在 ESRI.ArcGIS.AxControls.dll 中发生
问题描述: 新手们进行ArcGIS ArcObject开发时经常会遇到各种十分古怪的问题,比如下面的这个问题: “System.InvalidOperationException”类型的未经处理的异常 ...
- “System.FormatException”类型的未经处理的异常在 System.IdentityModel.dll 中发生 其他信息: 十六进制字符串格式无效。
如果你的 WebService 客户端证书配置都没问题,唯独调用接口会出现这个错误 “System.FormatException”类型的未经处理的异常在 System.IdentityModel.d ...
- System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生。其它信息:尝试读取或写入受保护的内存。这通常指示其它内存已损坏。
错误背景: 操作系统:编程环境:VS2013. 语言:VB.net: 数据库:SQLserver2008 做数据库连接时.发生的错误: 错误提示为: 说明:用VB.net连接SQLServer数据 ...
- “System.Runtime.InteropServices.COMException”类型的第一次机会异常在 ESRI.ArcGIS.Version.dll 中发生
“System.Runtime.InteropServices.COMException”类型的第一次机会异常在 ESRI.ArcGIS.Version.dll 中发生 其他信息: The speci ...
- System.Windows.Forms.AxHost.InvalidActiveXStateException”类型的异常在 ESRI.ArcGIS.AxControls.dll 中发生,但未在用户代码中进行处理
private void CopyAndOverwriteMap() { //IObjectCopy接口变量申明 IObjectCopy objectCopy = new ObjectCopyClas ...
- “RazorEngine.Templating.TemplateCompilationException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理
错误信息: "RazorEngine.Templating.TemplateCompilationException"类型的异常在 RazorEngine.NET4.0.dll 中 ...
- “System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
用管理员身份运行CMD:netsh winsock reset就可以解决
- “RazorEngine.Templating.TemplateParsingException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理 其他信息: Expected model identifier.
这个问题是由于在cshtml中 引用了model这个单词 它可能和Model在解析时有冲突. 解决方法:把model换成别的单词就可以了.
- MVC开发中的常见错误-04-“System.NullReferenceException”类型的异常在 BBFJ.OA.WebApp.dll 中发生,但未在用户代码中进行处理
未将对象引用设置到对象实例,又名空指针异常,伴随程序员开发的一生. 查看详细信息得知: SetUserRoleInfo() 首先想到的是 IBLL.IRoleInfoService RoleInfo ...
随机推荐
- hadoop集群的节点启动问题
start-all.sh 启动集群时,NameNode或DataNode节点启动不了,但之前可以启动. 查看hadoop中hdfs-site.xml配置文件 <property> < ...
- redis性能优化
redis日志截图:
- vue-router2.x
组件中的路由 <router-link to=""></router-link> 无参数 <router-link to="/ar/1&qu ...
- (转载)sizeof
[C++专题]C++ sizeof 使用规则及陷阱分析 摘要:鉴于sizeof为各大软件公司笔试.面试必考题,现收集sizeof的各种用法,尽量做到全面理解,其中例子希望能举一反三.提示:下文例子 ...
- Charles安装破解及使用
摘要 在发开过程中,追踪请求和监控请求与返回数据是我们经常会需要的一个需求,在Mac端,Charles是一款非常易用的抓包工具. Mac端的优秀抓包工具--Charles使用 一.简介 Charles ...
- jQuery之筛选操作
jQuery之筛选操作 筛选操作分三大类:过滤,查找,串联 eq(),first(),last(),hasClass(),filter(),is() html代码 jQuery代码 效果如下: map ...
- HTTP 和 HTTPS
一.HTTP协议 最近看了一些网络通信方面的书籍,研究了一下 HTTP 和 TCP/IP,有了一些新的收获和理解,在这里做个归纳和总结. (1)什么是HTTP协议 HTTP (HyperText Tr ...
- Azure Event Hub 技术研究系列3-Event Hub接收事件
上篇博文中,我们通过编程的方式介绍了如何将事件消息发送到Azure Event Hub: Azure Event Hub 技术研究系列2-发送事件到Event Hub 本篇文章中,我们继续:从Even ...
- 面试(2)-java-se-HashSet和TreeSet
Set是java中一个不包含重复元素的collection.更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素.正如其名称所暗示的, ...
- java 线程方法join的简单总结
虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...