Data Contracts and Circular References
نویسنده: مسعود پاکدل
تاریخ: ۱۳۹۲/۰۳/۲۰ ۸:۲۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
[DataContract]
public class Employee
{
[DataMember]
public string Name { get; set; }
[DataMember]
public Employee Manager { get; set; }
}[DataContract]
public class Department
{
[DataMember]
public string DeptName { get; set; }
[DataMember]
public List<Employee> Staff { get; set; }
} [ServiceContract]
public interface IDepartmentService
{
[OperationContract]
Department GetOneDepartment();
}public class DepartmentService : IDepartmentService
{
public Department GetOneDepartment()
{
List<Employee> listOfEmployees = new List<Employee>();
var masoud = new Employee() { Name = "Masoud" };
var saeed = new Employee() { Name = "Saeed", Manager = masoud };
var peyman = new Employee() { Name = "Peyman", Manager = saeed };
var mostafa = new Employee() { Name = "Mostafa", Manager = saeed };
return new Department() { DeptName = "IT", Staff = new List<Employee>() { masoud, saeed, peyman, mostafa } };
}
} class Program
{
static void Main( string[] args )
{
DepartmentServiceClient client = new DepartmentServiceClient();
var result = client.GetOneDepartment();
WriteDataToFile( result );
Console.ReadKey();
}
private static void WriteDataToFile( Department data )
{
DataContractSerializer dcs = new DataContractSerializer( typeof( Department ) );
var ms = new MemoryStream();
dcs.WriteObject( ms, data );
ms.Seek( 0, SeekOrigin.Begin );
var sr = new StreamReader( ms );
var xml = sr.ReadToEnd();
string filePath = @"d:\\data.xml";
if ( !File.Exists( filePath ) )
{
File.Create( filePath );
}
using ( TextWriter writer = new StreamWriter( filePath ) )
{
writer.Write( xml );
}
}<Department xmlns="http://schemas.datacontract.org/2004/07/Service" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Name>IT</Name>
<Staff>
<Employee>
<Manager i:nil="true"/>
<Name>Masoud</Name>
</Employee>
<Employee>
<Manager>
<Manager i:nil="true"/>
<Name>Masoud</Name>
</Manager>
<Name>Saeed</Name>
</Employee>
<Employee>
<Manager>
<Manager>
<Manager i:nil="true"/>
<Name>Masoud</Name>
</Manager>
<Name>Saeed</Name>
</Manager>
<Name>Peyman</Name>
</Employee>
<Employee>
<Manager>
<Manager>
<Manager i:nil="true"/>
<Name>Masoud</Name>
</Manager>
<Name>Saeed</Name>
</Manager>
<Name>Mostafa</Name>
</Employee>
</Staff>
</Department> [DataContract( IsReference = true )]
public class Employee
{
[DataMember]
public string Name { get; set; }
[DataMember]
public Employee Manager { get; set; }
}<Department xmlns="http://schemas.datacontract.org/2004/07/Service" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Name>IT</Name>
<Staff>
<Employee z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<Manager i:nil="true"/>
<Name>Masoud</Name>
</Employee>
<Employee z:Id="i2" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<Manager z:Ref="i1"/>
<Name>Saeed</Name>
</Employee>
<Employee z:Id="i3" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<Manager z:Ref="i2"/>
<Name>Peyman</Name>
</Employee>
<Employee z:Id="i4" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<Manager z:Ref="i2"/>
<Name>Mostafa</Name>
</Employee>
</Staff>
</Department>