Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / SurrogateDataContract.cs / 2 / SurrogateDataContract.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Runtime.Serialization { using System; using System.Reflection; using System.Xml; using DataContractDictionary=System.Collections.Generic.Dictionary; using System.Xml.Serialization; using System.Security; internal sealed class SurrogateDataContract : DataContract { /// /// Critical - holds instance of CriticalHelper which keeps state that is cached statically for serialization. /// Static fields are marked SecurityCritical or readonly to prevent /// data from being modified or leaked to other components in appdomain. /// [SecurityCritical] SurrogateDataContractCriticalHelper helper; ////// Critical - initializes SecurityCritical field 'helper' /// Safe - doesn't leak anything /// [SecurityCritical, SecurityTreatAsSafe] internal SurrogateDataContract(Type type, ISerializationSurrogate serializationSurrogate) : base(new SurrogateDataContractCriticalHelper(type, serializationSurrogate)) { helper = base.Helper as SurrogateDataContractCriticalHelper; } internal ISerializationSurrogate SerializationSurrogate { ////// Critical - fetches the critical serializationSurrogate field /// Safe - serializationSurrogate only needs to be protected for write /// [SecurityCritical, SecurityTreatAsSafe] get { return helper.SerializationSurrogate; } } public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { SerializationInfo serInfo = new SerializationInfo(UnderlyingType, XmlObjectSerializer.FormatterConverter); SerializationSurrogate.GetObjectData(obj, serInfo, context.GetStreamingContext()); context.WriteSerializationInfo(xmlWriter, UnderlyingType, serInfo); } public override object ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) { xmlReader.Read(); Type objType = UnderlyingType; object obj = objType.IsArray ? Array.CreateInstance(objType.GetElementType(), 0) : FormatterServices.GetUninitializedObject(objType); context.AddNewObject(obj); string objectId = context.GetObjectId(); SerializationInfo serInfo = context.ReadSerializationInfo(xmlReader, objType); object newObj = SerializationSurrogate.SetObjectData(obj, serInfo, context.GetStreamingContext(), null); if (newObj == null) newObj = obj; if (newObj is IDeserializationCallback) ((IDeserializationCallback)newObj).OnDeserialization(null); if (newObj is IObjectReference) newObj = ((IObjectReference)newObj).GetRealObject(context.GetStreamingContext()); context.ReplaceDeserializedObject(objectId, obj, newObj); xmlReader.ReadEndElement(); return newObj; } ////// Critical - holds all state used for for (de)serializing with ISerializationSurrogate. /// since it accesses data on the base type that is cached statically, we lock down access to it. /// [SecurityCritical(SecurityCriticalScope.Everything)] class SurrogateDataContractCriticalHelper : DataContract.DataContractCriticalHelper { ISerializationSurrogate serializationSurrogate; internal SurrogateDataContractCriticalHelper(Type type, ISerializationSurrogate serializationSurrogate) : base(type) { this.serializationSurrogate = serializationSurrogate; string name, ns; DataContract.GetDefaultStableName(DataContract.GetClrTypeFullName(type), out name, out ns); SetDataContractName(CreateQualifiedName(name, ns)); } internal ISerializationSurrogate SerializationSurrogate { get { return serializationSurrogate; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ToolStripProgressBar.cs
- GatewayDefinition.cs
- SyndicationDeserializer.cs
- SqlDataSourceCommandEventArgs.cs
- OleDbParameter.cs
- DesignerActionUIService.cs
- HandlerBase.cs
- DBConnection.cs
- ProvidersHelper.cs
- LayoutTableCell.cs
- TemplateContent.cs
- RelationshipFixer.cs
- DataGridViewLinkCell.cs
- MediaEntryAttribute.cs
- SQLMoney.cs
- DbQueryCommandTree.cs
- StoreContentChangedEventArgs.cs
- columnmapkeybuilder.cs
- ButtonRenderer.cs
- HtmlImage.cs
- WsdlInspector.cs
- DashStyle.cs
- ParentQuery.cs
- IndentTextWriter.cs
- DataObject.cs
- CheckBoxList.cs
- SharedUtils.cs
- DataRecordObjectView.cs
- CodeAccessPermission.cs
- BufferModesCollection.cs
- DataMemberConverter.cs
- NetworkAddressChange.cs
- ClonableStack.cs
- UnsafeMethods.cs
- shaperfactoryquerycachekey.cs
- propertytag.cs
- PriorityBindingExpression.cs
- FontSizeConverter.cs
- XPathDescendantIterator.cs
- MailDefinition.cs
- HandlerElement.cs
- IssuedTokenClientBehaviorsElement.cs
- RegexCharClass.cs
- InstanceHandleConflictException.cs
- TokenizerHelper.cs
- OrCondition.cs
- LostFocusEventManager.cs
- XslNumber.cs
- ExtensionSimplifierMarkupObject.cs
- ProtectedProviderSettings.cs
- PathFigureCollection.cs
- BitmapImage.cs
- _TLSstream.cs
- ComplexPropertyEntry.cs
- SafeMILHandleMemoryPressure.cs
- NTAccount.cs
- FixedStringLookup.cs
- TextFormatterHost.cs
- VisualStyleTypesAndProperties.cs
- cookieexception.cs
- RemotingAttributes.cs
- NotifyParentPropertyAttribute.cs
- MenuAdapter.cs
- DataGridViewColumnHeaderCell.cs
- PartialCachingControl.cs
- TranslateTransform.cs
- TextServicesContext.cs
- HMACRIPEMD160.cs
- ProcessModelSection.cs
- PeerInvitationResponse.cs
- ClickablePoint.cs
- SoapHeaderAttribute.cs
- DbConnectionOptions.cs
- HttpModulesSection.cs
- TemplateBuilder.cs
- FloaterParaClient.cs
- __TransparentProxy.cs
- securestring.cs
- FilterUserControlBase.cs
- EventLogPropertySelector.cs
- BrowserCapabilitiesFactory.cs
- XsltOutput.cs
- OdbcCommandBuilder.cs
- InvalidOperationException.cs
- SingleQueryOperator.cs
- GridPatternIdentifiers.cs
- WebDescriptionAttribute.cs
- EventLogInternal.cs
- TrackingServices.cs
- MessagePartProtectionMode.cs
- AppDomainGrammarProxy.cs
- BindingOperations.cs
- FormViewUpdateEventArgs.cs
- PageRanges.cs
- BinaryUtilClasses.cs
- ClientTargetSection.cs
- PartialList.cs
- controlskin.cs
- ColorAnimation.cs
- _HTTPDateParse.cs