1 //---------------------------------------------------------------------
2 // <copyright file="ProxyDataContractResolver.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
7 // @backupOwner Microsoft
8 //---------------------------------------------------------------------
10 using System.Collections.Generic;
14 using System.Runtime.Serialization;
16 namespace System.Data.Objects
19 /// A DataContractResolver that knows how to resolve proxy types created for persistent
20 /// ignorant classes to their base types. This is used with the DataContractSerializer.
22 public class ProxyDataContractResolver : DataContractResolver
24 private XsdDataContractExporter _exporter = new XsdDataContractExporter();
26 public override Type ResolveName(string typeName, string typeNamespace, Type declaredType, DataContractResolver knownTypeResolver)
28 EntityUtil.CheckStringArgument(typeName, "typeName");
29 EntityUtil.CheckStringArgument(typeNamespace, "typeNamespace");
30 EntityUtil.CheckArgumentNull(declaredType, "declaredType");
31 EntityUtil.CheckArgumentNull(knownTypeResolver, "knownTypeResolver");
33 return knownTypeResolver.ResolveName(typeName, typeNamespace, declaredType ,null);
36 public override bool TryResolveType(Type dataContractType, Type declaredType, DataContractResolver knownTypeResolver, out System.Xml.XmlDictionaryString typeName, out System.Xml.XmlDictionaryString typeNamespace)
38 EntityUtil.CheckArgumentNull(dataContractType, "dataContractType");
39 EntityUtil.CheckArgumentNull(declaredType, "declaredType");
40 EntityUtil.CheckArgumentNull(knownTypeResolver, "knownTypeResolver");
42 Type nonProxyType = ObjectContext.GetObjectType(dataContractType);
43 if (nonProxyType != dataContractType)
45 // Type was a proxy type, so map the name to the non-proxy name
46 XmlQualifiedName qualifiedName = _exporter.GetSchemaTypeName(nonProxyType);
47 XmlDictionary dictionary = new XmlDictionary(2);
48 typeName = new XmlDictionaryString(dictionary, qualifiedName.Name, 0);
49 typeNamespace = new XmlDictionaryString(dictionary, qualifiedName.Namespace, 1);
54 // Type was not a proxy type, so do the default
55 return knownTypeResolver.TryResolveType(dataContractType, declaredType, null, out typeName, out typeNamespace);