2 using System.Collections.Generic;
4 using System.Reflection;
6 using System.Xml.Serialization;
8 namespace System.Runtime.Serialization
10 internal partial class XmlDataContract
12 internal CreateXmlSerializableDelegate GenerateCreateXmlSerializableDelegate()
14 return () => new XmlDataContractInterpreter (this).CreateXmlSerializable ();
18 internal class XmlDataContractInterpreter
20 XmlDataContract contract;
22 public XmlDataContractInterpreter (XmlDataContract contract)
24 this.contract = contract;
27 public IXmlSerializable CreateXmlSerializable ()
29 Type type = contract.UnderlyingType;
32 value = FormatterServices.GetUninitializedObject (type);
34 value = GetConstructor ().Invoke (new object [0]);
35 return (IXmlSerializable) value;
38 ConstructorInfo GetConstructor ()
40 Type type = contract.UnderlyingType;
45 ConstructorInfo ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, null, Globals.EmptyTypeArray, null);
47 throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.GetString(SR.IXmlSerializableMustHaveDefaultConstructor, DataContract.GetClrTypeFullName(type))));