数据合同中的IsReference属性
DataContract
中IsReference
属性的用途是什么? 请求和响应如何适用此属性?
它确定如何对象序列化,默认情况下, IsReference=false
。
设置IsReference = true
允许可以相互引用的对象树的序列化。 因此,对于每个Employees
都有一个Manager
属性( Employee
也是Employee
)的列表,可以为每个Employee
引用Manager
,而不是在每个Employee
节点中embeddedManager
:
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>
摘自此博客的摘录以及应用了该属性的生成XML的示例。
MSDN – IsReference属性提供了详细信息以及可互操作的对象引用 。
另外IsReference
在.NET Framework 3.5中不存在。 所以在使用这个Framework版本的时候可能会出错 – 它只存在于4.5,4,3.5 SP1和Silverlight中。
“错误297”System.Runtime.Serialization.DataContractAttribute“不包含”IsReference“的定义