wcf序列化嵌套类(如TreeNode)异常原因
循环引用类在WCF中的传递
循环引用类在WCF中的传递问题,例如:
[DataContract]
public class AB
{
public string name {get;set;}
[DataMember]
public IList<AB> ABs { get; set; }
}
这种情况调用WCF接口总是调用失败。
使用WCF序列化方式进行测试,测试代码如下:
try
{
AB a = new AB();
a.name = "p";
a.ABs=new List<AB>();
a.ABs.Add(a);
DataContractSerializer dcs = new DataContractSerializer(typeof(AB));
using (Stream fs = new FileStream("test.soap", FileMode.Create, FileAccess.Write, FileShare.None))
{
dcs.WriteObject(fs, a); //反序列化使用ReadObject方法,但返回的是Object类型,需要进行显示类型转换。
}
}
catch (Exception ex)
{
}
异常的信息为““System.Collections.Generic.List`1[[Beisen.PerformanceCloud.ServiceImp.Tests.AssessmentModuleLibProviderTests+AB, Beisen.PerformanceCloud.ServiceInterfaceTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]”类型的对象图包含循环,如果禁用引用跟踪,择无法对其进行序列化。”
处理方式:
(1)在类上面增加IsReference = true,如果该类有基类,需要基类的IsReference=true,否则继承类无法实现。
[DataContract(IsReference = true)]
public class AB
{
public string name { get; set; }
[DataMember]
public IList<AB> ABs { get; set; }
}
(1)不要让对象有引用关系,比如:
AB a = new AB();
a.name = "p";
a.ABs = new List<AB>();
AB a2 = new AB();// 创建新对象,属性的引用关系也切除
a2.name = a.name;
a2.ABs =new List<AB>();
a.ABs.Add(a2);
DataContractSerializer dcs = new DataContractSerializer(typeof(AB));
using (Stream fs = new FileStream("test.soap", FileMode.Create, FileAccess.Write, FileShare.None))
{
dcs.WriteObject(fs, a); //反序列化使用ReadObject方法,但返回的是Object类型,需要进行显示类型转换。
}
wcf序列化嵌套类(如TreeNode)异常原因的更多相关文章
- Python 之 Json序列化嵌套类
想要用python自已手动序列化嵌套类,就要明白两个问题: 1.Json是什么? 2.Json支持什么类型? 答案显而易见 Json就是嵌套对象 Json在python中支持列表,字典(当然也支持in ...
- C++ 嵌套类使用(一)
一.嵌套类 在一个类的内部定义另一个类,我们称之为嵌套类(nested class),或者嵌套类型.之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的 ...
- C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类
类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. //单继承的定义 class B:public A { ...
- C++学习之嵌套类和局部类
C++学习之嵌套类和局部类 局部类 在一个函数体内定义的类称为局部类. 局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关.在定义局部类时需要注意:局部类 ...
- 嵌套类,PIMPL
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Wcf序列化的循环引用问题1
1.Wcf数据契约序列化,使用的类DataContractSerializer 默认如果类不指定[DataContract],则序列化类的所有字段,并且在出现循环引用的时候回抛出异常,服务终止 msd ...
- Java基础教程(14)--嵌套类
Java允许在一个类中定义另外一个类,这样的类被称为嵌套类,就像下面这样: class OuterClass { ... class NestedClass { ... } } 嵌套类分为两种 ...
- JAVA 嵌套类和内部类
一.什么是嵌套类及内部类? 可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型: 静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类, ...
- WCF序列化
在WCF中,提供了专门用来序列化和反序列操作的类,该类就是DataContractSerializer类.一般而言,WCF会自动选择使用DataContractSerializer来对可序列话数据契约 ...
随机推荐
- 2.GoF 的 23 种设计模式的分类和功能
1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式.结构型模式和行为型模式 3 种. 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”.GoF ...
- 深度学习中目标检测Object Detection的基础概念及常用方法
目录 关键术语 方法 two stage one stage 共同存在问题 多尺度 平移不变性 样本不均衡 各个步骤可能出现的问题 输入: 网络: 输出: 参考资料 What is detection ...
- mysql常用配置注意项与sql优化
建立数据库: 建立数据库时编码字符集采用utf8 排序规则: 后缀"_cs"或者"_ci"意思是区分大小写和不区分大小写(Case Sensitive & ...
- python--微信小程序“跳一跳‘外挂
参考网站:http://blog.csdn.net/LittleBeautiful/article/details/78955792 0x00:准备工具: Windows 10: 一个安卓真机 pyt ...
- No archetypes currently available. The archetype list will refresh when the indexes finish updating
配置方法: 1. 在卡住的而画面点击"config" 2. 点击"Add remote catalog", 然后设置华为云的maven仓库地址, 然后点击&qu ...
- Python27期:错误宝典
错误信息1:SyntaxError:invalid syntax--无效语法 解决办法:变量名不能使用关键字如下图: 错误信息2:TypeError:'str' object is not calla ...
- Spring Boot 引入外部yml配置文件
当需要在springboot中引用其他的yml文件时,需要在application.yml里配置 spring: profiles: include: email,xmyb ...
- [LeetCode] 891. Sum of Subsequence Widths 子序列宽度之和
Given an array of integers A, consider all non-empty subsequences of A. For any sequence S, let the ...
- [LeetCode] 75. Sort Colors 颜色排序
Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...
- Spring security 知识笔记【自定义登录页面】
一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...