数据合同中的IsReference属性

DataContractIsReference属性的用途是什么? 请求和响应如何适用此属性?

它确定如何对象序列化,默认情况下, 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“的定义