Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'esempio NetDcSasDcSwithDCR dimostra come l'uso di DataContractSerializer con un appropriato DataContractResolver fornisca la stessa funzionalità di NetDataContractSerializer. In questo esempio viene illustrato come creare l'oggetto appropriato DataContractResolver e come aggiungerlo all'oggetto DataContractSerializer.
Dettagli di esempio
NetDataContractSerializer differisce da DataContractSerializer in un modo importante: NetDataContractSerializer include informazioni sul tipo CLR nel codice XML serializzato, mentre DataContractSerializer non. Pertanto, NetDataContractSerializer può essere usato solo se le estremità di serializzazione e deserializzazione condividono gli stessi tipi CLR. Tuttavia, è consigliabile usare DataContractSerializer perché le prestazioni sono migliori di NetDataContractSerializer. È possibile modificare le informazioni serializzate in DataContractSerializer aggiungendo un oggetto DataContractResolver a esso.
Questo esempio è costituito da due progetti. Il primo progetto usa NetDataContractSerializer per serializzare un oggetto . Il secondo progetto usa DataContractSerializer con un DataContractResolver per fornire la stessa funzionalità del primo progetto.
Nell'esempio di codice seguente viene illustrata l'implementazione di un elemento DataContractResolver personalizzato, denominato MyDataContractResolver, aggiunto a DataContractSerializer nel progetto DCSwithDCR.
class MyDataContractResolver : DataContractResolver
{
private XmlDictionary dictionary = new XmlDictionary();
public MyDataContractResolver()
{
}
// Used at deserialization
// Allows users to map xsi:type name to any Type
public override Type ResolveName(string typeName, string typeNamespace, DataContractResolver knownTypeResolver)
{
Type type = knownTypeResolver.ResolveName(typeName, typeNamespace, null);
type ??= Type.GetType(typeName + ", " + typeNamespace);
return type;
}
// Used at serialization
// Maps any Type to a new xsi:type representation
public override void ResolveType(Type dataContractType, DataContractResolver knownTypeResolver, out XmlDictionaryString typeName, out XmlDictionaryString typeNamespace)
{
knownTypeResolver.ResolveType(dataContractType, null, out typeName, out typeNamespace);
if (typeName == null || typeNamespace == null)
{
XmlDictionary dictionary = new XmlDictionary();
typeName = dictionary.Add(dataContractType.FullName);
typeNamespace = dictionary.Add(dataContractType.Assembly.FullName);
}
}
}
Per usare questo esempio
Usando Visual Studio, aprire il file della soluzione DCRSample.sln.
Fare clic con il pulsante destro del mouse sul file della soluzione e scegliere Proprietà.
Nella finestra di dialogo Pagine delle proprietà della soluzione , in Proprietà comuni, Progetto di avvio selezionare Più progetti di avvio:.
Accanto al progetto DCSwithDCR selezionare Avvia dall'elenco a discesa Azione .
Accanto al progetto NetDCS selezionare Avvia dall'elenco a discesa Azione .
Fare clic su OK per chiudere la finestra di dialogo.
Per compilare la soluzione, premere CTRL+MAIUSC+B.
Per eseguire la soluzione, premere CTRL+F5.