| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Xml;
- using System.Xml.Serialization;
- namespace System.Runtime.Serialization
- {
- internal partial class XmlDataContract
- {
- internal CreateXmlSerializableDelegate GenerateCreateXmlSerializableDelegate()
- {
- return () => new XmlDataContractInterpreter (this).CreateXmlSerializable ();
- }
- }
-
- internal class XmlDataContractInterpreter
- {
- XmlDataContract contract;
-
- public XmlDataContractInterpreter (XmlDataContract contract)
- {
- this.contract = contract;
- }
-
- public IXmlSerializable CreateXmlSerializable ()
- {
- Type type = contract.UnderlyingType;
- object value = null;
- if (type.IsValueType)
- value = FormatterServices.GetUninitializedObject (type);
- else
- value = GetConstructor ().Invoke (new object [0]);
- return (IXmlSerializable) value;
- }
- ConstructorInfo GetConstructor ()
- {
- Type type = contract.UnderlyingType;
- if (type.IsValueType)
- return null;
- ConstructorInfo ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, null, Globals.EmptyTypeArray, null);
- if (ctor == null)
- throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.GetString(SR.IXmlSerializableMustHaveDefaultConstructor, DataContract.GetClrTypeFullName(type))));
- return ctor;
- }
- }
- }
|