1.wcf資料契約序列化,使用的類datacontractserializer
預設如果類不指定[datacontract],則序列化類的所有字段,並且在出現迴圈引用的時候回丟擲異常,服務終止
msdn文件說明:
/** wcf 資料契約序列化使用「datacontractserializer」,底層是xml序列化
* 1.如果類上不指定 [datacontract],預設序列化,物件的所有屬性(包括null的)
* 2.如果類上指定 [datacontract],序列化只檢測 屬性有 [datamember] 的
* 3.沒有顯示指定忽略某字段的方式
*///
建立班級
grade gradeone = new grade() ;
gradeone.students = new list();
//新增班級下的學生
student stu = new
student();
stu.id = 1
;stu.name = "張三"
;//設定學生所屬的班級
/** 1.注意:如果當前子類的父類物件引用了當前父類物件丟擲迴圈引用異常
* 解決方法1: 對於需要序列化的類顯示指定契約標識 [datacontract]
* 並且忽略 子類的父類物件,
* 也就是 對 grade 不指定 [datamember]
*//*
* 解決方法2:
* 在類的方法標記使用 [datacontract(isreference = true)]
* isreference:如果使用標準 xml 保留物件引用資料,則為 true;否則為 false
*/stu.grade =gradeone;
gradeone.students.add(stu);
datacontractserializer serializer = new
datacontractserializer(gradeone.gettype());
string result = null
;using (memorystream s = new
memorystream())
}console.writeline(result);
預設設定(出現異常):
publicclass
student
public
string name
public grade grade
}public
class
grade
public
string gradename
public liststudents
}
解決方法1,忽略導致迴圈引用的屬性:
這樣的缺點:就是在客戶端獲取到學生物件,不能直接也得到學生所屬的班級物件
[datacontract]public
class
student
[datamember]
public
string name
[datamember]
public grade grade
}[datacontract]
public
class
grade
[datamember]
public
string gradename
[datamember]
public liststudents
}
序列化結果:
<?xml version="1.0" encoding="utf-8"
?>
<
grade
xmlns
=""xmlns:i
="">
<
gradeid
>1
gradeid
>
<
gradename
>班級1
gradename
>
<
students
>
<
student
>
<
grade
i:nil
="true"
/>
<
id>1
id>
<
name
>張三
name
>
student
>
students
>
grade
>
解決方法2(推薦),在datacontract上使用isreference引數,並且設定為true,
互操作引用說明:
isreferences:如果使用標準 xml 保留物件引用資料,則為 true;否則為 false。
[datacontract(isreference = true)]public
class
student
[datamember]
public
string name
[datamember]
public grade grade
}[datacontract(isreference = true
)]public
class
grade
[datamember]
public
string gradename
[datamember]
public liststudents
}
或者在初始化物件的時候指定
datacontractserializer serializer = new datacontractserializer(typeof(parent),
"parent",
string
.empty,
null
,
int.maxvalue,
false
,
true
,
null
,
null);
序列化結果:
<?xml version="1.0" encoding="utf-8"
?>
<
grade
xmlns
=""xmlns:i
=""xmlns:z
=""z:id="i1">
<
gradeid
>1
gradeid
>
<
gradename
>班級1
gradename
>
<
students
>
<
student
z:id
="i2"
>
<
gradez:ref
="i1"/>
<
id>1
id>
<
name
>張三
name
>
student
>
students
>
grade
>
物件迴圈引用與序列化問題
最近遇到乙個問題,由於乙個物件內部存在相互引用,導致json序列化失敗.比如定義有乙個類有 class circlereference public void setparam string param public circlereference getreference public void ...
序列化問題
對於ajax來說,只能接收字串,那麼我們在後台的關鍵問題是,如何才能將我們要傳入的資料序列化,使之成為ajax可以接收的資料型別呢?json模組是乙個序列化的辦法,然而json只能序列化python的三大資料型別,元組,列表,字典,對於其他的資料型別,json並不能為我們序列化,那麼我們應該怎麼辦呢...
序列化問題
package cn.edu360 import j a.io.created by zx on 2017 6 25.class maptask extends serializable def m2 line string array string object sertask created b...