Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este ejemplo se muestra el modo en que el uso de un DataContractSerializer con un DataContractResolver adecuado proporciona la misma funcionalidad que NetDataContractSerializer. En este ejemplo se muestra cómo crear el DataContractResolver adecuado y cómo agregarlo a DataContractSerializer.
Detalles del ejemplo
NetDataContractSerializer difiere de DataContractSerializer en un aspecto importante: NetDataContractSerializer incluye información de tipos CLR en el XML serializado, mientras que DataContractSerializer no. Por lo tanto, solo se puede utilizar NetDataContractSerializer si ambos extremos, los de la serialización y los de la deserialización, comparten los mismos tipos de CLR. Sin embargo, se recomienda utilizar DataContractSerializer porque su rendimiento es mejor que el de NetDataContractSerializer. Puede cambiar la información que se serializa en DataContractSerializer agregando un DataContractResolver a él.
Este ejemplo consta de dos proyectos. El primer proyecto utiliza NetDataContractSerializer para serializar un objeto. El segundo proyecto utiliza DataContractSerializer con DataContractResolver para proporcionar la misma funcionalidad que el primer proyecto.
El siguiente ejemplo de código muestra la implementación de un DataContractResolver personalizado denominado MyDataContractResolver
que se agrega a DataContractSerializer en el proyecto 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);
if (type == 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);
}
}
}
Para utilizar este ejemplo
Abra el archivo de CDRSample.sln con Visual Studio 2010.
Haga clic con el botón secundario en el archivo de solución y elija Propiedades.
En el diálogo Páginas de propiedades de solución, en Propiedades comunes, Proyecto de inicio, seleccione Proyectos de inicio múltiples.
Junto al proyecto DCSwithDCR, seleccione Iniciar desde el menú desplegable Acción.
Junto al proyecto NetDCS, seleccione Iniciar desde el menú desplegable Acción.
Haga clic en Aceptar para cerrar el cuadro de diálogo.
Presione F6 para compilar la solución.
Presione CTRL+F5 para ejecutar la solución.
![]() |
---|
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.
<InstallDrive>:\WF_WCF_Samples
Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.
<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Contract\Data\NetDcSasDcSwithDCR
|