Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Alapértelmezés szerint DataContractSerializer érték szerint szerializálja az objektumokat. A tulajdonság használatával IsReference utasíthatja az adatszerződés szerializálóját az objektumhivatkozások megőrzésére az objektumok szerializálása során.
Létrehozott XML
Vegyük például a következő objektumot:
[DataContract]
public class X
{
SomeClass someInstance = new SomeClass();
[DataMember]
public SomeClass A = someInstance;
[DataMember]
public SomeClass B = someInstance;
}
public class SomeClass
{
}
Amikor a PreserveObjectReferences értéke az alapértelmezett false (az alapbeállítás), a következő XML jön létre:
<X>
<A>contents of someInstance</A>
<B>contents of someInstance</B>
</X>
Ha PreserveObjectReferences be van állítva true, a következő XML jön létre:
<X>
<A id="1">contents of someInstance</A>
<B ref="1"></B>
</X>
A XsdDataContractExporter azonban nem írja le a id és ref attribútumokat a sémájában, még akkor sem, ha a preserveObjectReferences tulajdonság true értékre van állítva.
Az IsReference használata
Ahhoz, hogy az objektumhivatkozási információk érvényesek legyenek az azokat leíró séma szerint, alkalmazza az DataContractAttribute attribútumot egy típusra, és állítsa az IsReference jelőlőt true értékre. Az alábbi példa módosítja az osztályt X az előző példában a következő hozzáadásával IsReference:
[DataContract(IsReference=true)]
public class X
{
SomeClass someInstance = new SomeClass();
[DataMember]
public SomeClass A = someInstance;
[DataMember]
public SomeClass B = someInstance;
}
public class SomeClass
{
}
A létrehozott XML a következő:
<X>
<A id="1">
<Value>contents of A</Value>
</A>
<B ref="1"></B>
</X>
A IsReference használata biztosítja a megfelelőséget az üzenet körkörös továbbítása során. Nélküle, ha egy típus a sémából jön létre, az adott típus XML-kimenete nem feltétlenül kompatibilis az eredetileg feltételezett sémával. Más szóval, bár a id és ref attribútumok szerializálva lettek, az eredeti séma tilthatta volna meg ezeknek az attribútumoknak az előfordulását (vagy az összes attribútumot) XML-ben. Egy IsReference adattagra alkalmazva a tag továbbra is hivatkozásra alkalmasként lesz felismerve, amikor oda-vissza bejárás történik.