| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- //------------------------------------------------------------------------------
- // <copyright file="XmlSerializer.cs" company="Microsoft">
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // </copyright>
- // <owner current="true" primary="true">Microsoft</owner>
- //------------------------------------------------------------------------------
- namespace System.Xml.Serialization {
- using System.Reflection;
- using System.Collections;
- using System.IO;
- using System.Xml.Schema;
- using System;
- using System.Text;
- using System.Threading;
- using System.Globalization;
- using System.Security.Permissions;
- using System.Security.Policy;
- using System.Xml.Serialization.Configuration;
- using System.Diagnostics;
- using System.CodeDom.Compiler;
- /// <include file='doc\XmlSerializerFactory.uex' path='docs/doc[@for="XmlSerializerFactory"]/*' />
- /// <devdoc>
- /// <para>[To be supplied.]</para>
- /// </devdoc>
- public class XmlSerializerFactory {
- static TempAssemblyCache cache = new TempAssemblyCache();
- /// <include file='doc\XmlSerializerFactory.uex' path='docs/doc[@for="XmlSerializerFactory.CreateSerializer"]/*' />
- /// <devdoc>
- /// <para>[To be supplied.]</para>
- /// </devdoc>
- public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, string defaultNamespace) {
- return CreateSerializer(type, overrides, extraTypes, root, defaultNamespace, null);
- }
- /// <include file='doc\XmlSerializerFactory.uex' path='docs/doc[@for="XmlSerializerFactory.CreateSerializer2"]/*' />
- /// <devdoc>
- /// <para>[To be supplied.]</para>
- /// </devdoc>
- public XmlSerializer CreateSerializer(Type type, XmlRootAttribute root) {
- return CreateSerializer(type, null, new Type[0], root, null, null);
- }
- /// <include file='doc\XmlSerializerFactory.uex' path='docs/doc[@for="XmlSerializerFactory.CreateSerializer3"]/*' />
- /// <devdoc>
- /// <para>[To be supplied.]</para>
- /// </devdoc>
- public XmlSerializer CreateSerializer(Type type, Type[] extraTypes) {
- return CreateSerializer(type, null, extraTypes, null, null, null);
- }
- /// <include file='doc\XmlSerializerFactory.uex' path='docs/doc[@for="XmlSerializerFactory.CreateSerializer4"]/*' />
- /// <devdoc>
- /// <para>[To be supplied.]</para>
- /// </devdoc>
- public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides overrides) {
- return CreateSerializer(type, overrides, new Type[0], null, null, null);
- }
- /// <include file='doc\XmlSerializerFactory.uex' path='docs/doc[@for="XmlSerializerFactory.CreateSerializer5"]/*' />
- /// <devdoc>
- /// <para>[To be supplied.]</para>
- /// </devdoc>
- public XmlSerializer CreateSerializer(XmlTypeMapping xmlTypeMapping) {
- TempAssembly tempAssembly = XmlSerializer.GenerateTempAssembly(xmlTypeMapping);
- return (XmlSerializer)tempAssembly.Contract.TypedSerializers[xmlTypeMapping.Key];
- }
- /// <include file='doc\XmlSerializerFactory.uex' path='docs/doc[@for="XmlSerializerFactory.CreateSerializer6"]/*' />
- /// <devdoc>
- /// <para>[To be supplied.]</para>
- /// </devdoc>
- public XmlSerializer CreateSerializer(Type type) {
- return CreateSerializer(type, (string)null);
- }
- /// <include file='doc\XmlSerializerFactory.uex' path='docs/doc[@for="XmlSerializerFactory.CreateSerializer1"]/*' />
- /// <devdoc>
- /// <para>[To be supplied.]</para>
- /// </devdoc>
- public XmlSerializer CreateSerializer(Type type, string defaultNamespace) {
- if (type == null)
- throw new ArgumentNullException("type");
- TempAssembly tempAssembly = cache[defaultNamespace, type];
- XmlTypeMapping mapping = null;
- if (tempAssembly == null) {
- lock (cache) {
- tempAssembly = cache[defaultNamespace, type];
- if (tempAssembly == null) {
- XmlSerializerImplementation contract;
- Assembly assembly = TempAssembly.LoadGeneratedAssembly(type, defaultNamespace, out contract);
- if (assembly == null) {
- // need to reflect and generate new serialization assembly
- XmlReflectionImporter importer = new XmlReflectionImporter(defaultNamespace);
- mapping = importer.ImportTypeMapping(type, null, defaultNamespace);
- tempAssembly = XmlSerializer.GenerateTempAssembly(mapping, type, defaultNamespace);
- }
- else {
- tempAssembly = new TempAssembly(contract);
- }
- cache.Add(defaultNamespace, type, tempAssembly);
- }
- }
- }
- if (mapping == null) {
- mapping = XmlReflectionImporter.GetTopLevelMapping(type, defaultNamespace);
- }
- return (XmlSerializer)tempAssembly.Contract.GetSerializer(type);
- }
- public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, string defaultNamespace, string location) {
- #pragma warning disable 618 // Passing through null evidence to centralize the CreateSerializer implementation
- return CreateSerializer(type, overrides, extraTypes, root, defaultNamespace, location, null);
- #pragma warning restore 618
- }
- /// <include file='doc\XmlSerializerFactory.uex' path='docs/doc[@for="XmlSerializerFactory.CreateSerializer7"]/*' />
- /// <devdoc>
- /// <para>[To be supplied.]</para>
- /// </devdoc>
- [Obsolete("This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateSerializer which does not take an Evidence parameter. See http://go2.microsoft.com/fwlink/?LinkId=131738 for more information.")]
- public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, string defaultNamespace, string location, Evidence evidence) {
- if (type == null) {
- throw new ArgumentNullException("type");
- }
- if (location != null || evidence != null) {
- DemandForUserLocationOrEvidence();
- }
- XmlReflectionImporter importer = new XmlReflectionImporter(overrides, defaultNamespace);
- for (int i = 0; i < extraTypes.Length; i++)
- importer.IncludeType(extraTypes[i]);
- XmlTypeMapping mapping = importer.ImportTypeMapping(type, root, defaultNamespace);
- TempAssembly tempAssembly = XmlSerializer.GenerateTempAssembly(mapping, type, defaultNamespace, location, evidence);
- return (XmlSerializer)tempAssembly.Contract.TypedSerializers[mapping.Key];
- }
- [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
- void DemandForUserLocationOrEvidence() {
- // Ensure full trust before asserting full file access to the user-provided location or evidence
- }
- }
- }
|