DataContract
中 IsReference
属性的用途是什么?应用此属性后,请求和响应有何变化?
最佳答案
它决定对象的序列化方式,默认情况下,IsReference=false
。
设置IsReference = true
允许对可以相互引用的对象树进行序列化。因此,有了一个 Employees
列表,每个员工都有一个 Manager
属性(他也是一个 Employee
),对 Manager 的引用可以保存每个
,而不是在每个 Employee
的 Employee
节点中嵌入 Manager
:
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
会产生:
<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 。
关于wcf - 数据协定中的 IsReference 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1037201/