Bagikan melalui


Referensi objek yang dapat saling beroperasi

Secara default, DataContractSerializer menserialisasikan objek menurut nilai. Anda dapat menggunakan IsReference properti untuk menginstruksikan serializer kontrak data untuk mempertahankan referensi objek saat membuat serial objek.

XML yang dihasilkan

Sebagai contoh, pertimbangkan objek berikut:

[DataContract]  
public class X  
{  
    SomeClass someInstance = new SomeClass();  
    [DataMember]  
    public SomeClass A = someInstance;  
    [DataMember]  
    public SomeClass B = someInstance;  
}  
  
public class SomeClass
{  
}  

Dengan PreserveObjectReferences diatur ke false (default), XML berikut dibuat:

<X>  
   <A>contents of someInstance</A>  
   <B>contents of someInstance</B>  
</X>  

Dengan PreserveObjectReferences diatur ke true, XML berikut dibuat:

<X>  
   <A id="1">contents of someInstance</A>  
   <B ref="1"></B>  
</X>  

Namun, XsdDataContractExporter tidak menjelaskan atribut id dan ref dalam skemanya, bahkan ketika properti preserveObjectReferences diatur ke true.

Menggunakan IsReference

Untuk menghasilkan informasi referensi objek yang valid sesuai dengan skema yang menjelaskannya, terapkan DataContractAttribute atribut ke jenis, dan atur IsReference bendera ke true. Contoh berikut memodifikasi kelas X dalam contoh sebelumnya dengan menambahkan IsReference:

[DataContract(IsReference=true)]
public class X
{  
     SomeClass someInstance = new SomeClass();
     [DataMember]
     public SomeClass A = someInstance;
     [DataMember]
     public SomeClass B = someInstance;
}
  
public class SomeClass
{
}  

XML yang dihasilkan adalah sebagai berikut:

<X>  
    <A id="1">
        <Value>contents of A</Value>  
    </A>
    <B ref="1"></B>  
</X>

Menggunakan IsReference memastikan kepatuhan terhadap pengiriman ulang pesan. Tanpa itu, ketika jenis dihasilkan dari skema, output XML untuk jenis tersebut tidak selalu kompatibel dengan skema yang awalnya diasumsikan. Dengan kata lain, meskipun atribut id dan ref diserialisasikan, skema asli dapat menghalangi atribut ini (atau semua atribut) untuk tidak muncul dalam XML. Dengan IsReference diterapkan pada anggota data, anggota tersebut terus dikenali sebagai dapat dirujuk ketika diproses ulang.

Lihat juga