IDataContractSurrogate.cs 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //-----------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //-----------------------------------------------------------------------------
  4. namespace System.Runtime.Serialization
  5. {
  6. using System;
  7. using System.CodeDom;
  8. using System.Reflection;
  9. using System.Collections.ObjectModel;
  10. public interface IDataContractSurrogate
  11. {
  12. Type GetDataContractType(Type type);
  13. object GetObjectToSerialize(object obj, Type targetType);
  14. object GetDeserializedObject(object obj, Type targetType);
  15. object GetCustomDataToExport(MemberInfo memberInfo, Type dataContractType);
  16. object GetCustomDataToExport(Type clrType, Type dataContractType);
  17. void GetKnownCustomDataTypes(Collection<Type> customDataTypes);
  18. Type GetReferencedTypeOnImport(string typeName, string typeNamespace, object customData);
  19. #if !NO_CODEDOM
  20. CodeTypeDeclaration ProcessImportedType(CodeTypeDeclaration typeDeclaration, CodeCompileUnit compileUnit);
  21. #endif
  22. }
  23. static class DataContractSurrogateCaller
  24. {
  25. internal static Type GetDataContractType(IDataContractSurrogate surrogate, Type type)
  26. {
  27. if (DataContract.GetBuiltInDataContract(type) != null)
  28. return type;
  29. Type dcType = surrogate.GetDataContractType(type);
  30. if (dcType == null)
  31. return type;
  32. return dcType;
  33. }
  34. internal static object GetObjectToSerialize(IDataContractSurrogate surrogate, object obj, Type objType, Type membertype)
  35. {
  36. if (obj == null)
  37. return null;
  38. if (DataContract.GetBuiltInDataContract(objType) != null)
  39. return obj;
  40. return surrogate.GetObjectToSerialize(obj, membertype);
  41. }
  42. internal static object GetDeserializedObject(IDataContractSurrogate surrogate, object obj, Type objType, Type memberType)
  43. {
  44. if (obj == null)
  45. return null;
  46. if (DataContract.GetBuiltInDataContract(objType) != null)
  47. return obj;
  48. return surrogate.GetDeserializedObject(obj, memberType);
  49. }
  50. internal static object GetCustomDataToExport(IDataContractSurrogate surrogate, MemberInfo memberInfo, Type dataContractType)
  51. {
  52. return surrogate.GetCustomDataToExport(memberInfo, dataContractType);
  53. }
  54. internal static object GetCustomDataToExport(IDataContractSurrogate surrogate, Type clrType, Type dataContractType)
  55. {
  56. if (DataContract.GetBuiltInDataContract(clrType) != null)
  57. return null;
  58. return surrogate.GetCustomDataToExport(clrType, dataContractType);
  59. }
  60. internal static void GetKnownCustomDataTypes(IDataContractSurrogate surrogate, Collection<Type> customDataTypes)
  61. {
  62. surrogate.GetKnownCustomDataTypes(customDataTypes);
  63. }
  64. internal static Type GetReferencedTypeOnImport(IDataContractSurrogate surrogate, string typeName, string typeNamespace, object customData)
  65. {
  66. if (DataContract.GetBuiltInDataContract(typeName, typeNamespace) != null)
  67. return null;
  68. return surrogate.GetReferencedTypeOnImport(typeName, typeNamespace, customData);
  69. }
  70. #if !NO_CODEDOM
  71. internal static CodeTypeDeclaration ProcessImportedType(IDataContractSurrogate surrogate, CodeTypeDeclaration typeDeclaration, CodeCompileUnit compileUnit)
  72. {
  73. return surrogate.ProcessImportedType(typeDeclaration, compileUnit);
  74. }
  75. #endif
  76. }
  77. }