DataContract 中 IsReference 属性的目的是什么?请求和响应如何随应用此属性而变化?
DataContract
IsReference
.NET Framework 3.5中也不存在 IsReference . 因此,在使用该框架版本时可能会出现错误 - 它只存在于4.5,4,3.5 SP1和Silverlight中 .
“错误297'System.Runtime.Serialization.DataContractAttribute'不包含'IsReference'的定义”
它确定了对象的序列化方式,默认情况下为 IsReference=false .
IsReference=false
设置 IsReference = true 允许序列化可以相互引用的对象树 . 因此,对于 Employees 的列表,每个 Employees 都具有 Manager (也是 Employee )的属性,可以保留对每个 Employee 的 Manager 的引用,而不是在每个 Employee 节点中嵌入 Manager :
IsReference = true
Employees
Manager
Employee
IsReference=false 会产生:
<Employee> <Manager i:nil=“true“ /> <Name>Kenny</Name> </Employee> <Employee> <Manager> <Manager i:nil=“true“ /> <Name>Kenny</Name> </Manager> <Name>Bob</Name> </Employee> <Employee> <Manager> <Manager i:nil=“true“ /> <Name>Kenny</Name> </Manager> <Name>Alice</Name> </Employee>
IsReference=true 会产生的地方:
IsReference=true
<Employee z:Id=“i1“ xmlns:z=“http://schemas.microsoft.com/2003/10/Serialization/“> <Manager i:nil=“true“ /> <Name>Kenny</Name> </Employee> <Employee z:Id=“i2“ xmlns:z=“http://schemas.microsoft.com/2003/10/Serialization/“> <Manager z:Ref=“i1“ /> <Name>Bob</Name> </Employee> <Employee z:Id=“i3“ xmlns:z=“http://schemas.microsoft.com/2003/10/Serialization/“> <Manager z:Ref=“i1“ /> <Name>Alice</Name> </Employee>
从weblog获取的片段,其中包含完整说明以及应用了属性的生成XML的示例 .
MSDN - IsReference Property提供详细信息以及Interoperable Object References .
2 回答
.NET Framework 3.5中也不存在
IsReference
. 因此,在使用该框架版本时可能会出现错误 - 它只存在于4.5,4,3.5 SP1和Silverlight中 .它确定了对象的序列化方式,默认情况下为
IsReference=false
.设置
IsReference = true
允许序列化可以相互引用的对象树 . 因此,对于Employees
的列表,每个Employees
都具有Manager
(也是Employee
)的属性,可以保留对每个Employee
的Manager
的引用,而不是在每个Employee
节点中嵌入Manager
:IsReference=false
会产生:IsReference=true
会产生的地方:从weblog获取的片段,其中包含完整说明以及应用了属性的生成XML的示例 .
MSDN - IsReference Property提供详细信息以及Interoperable Object References .