Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Services / Monitoring / system / Diagnosticts / Design / StringDictionaryCodeDomSerializer.cs / 1 / StringDictionaryCodeDomSerializer.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* */ namespace System.Diagnostics.Design { using System; using System.Design; using System.CodeDom; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Diagnostics; using System.Reflection; using System.ComponentModel.Design.Serialization; using System.Collections.Specialized; ////// /// This serializer serializes string dictionaries. /// internal class StringDictionaryCodeDomSerializer : CodeDomSerializer { ////// /// This method takes a CodeDomObject and deserializes into a real object. /// We don't do anything here. /// public override object Deserialize(IDesignerSerializationManager manager, object codeObject) { Debug.Fail("Don't expect this to be called."); return null; } ////// /// Serializes the given object into a CodeDom object. /// public override object Serialize(IDesignerSerializationManager manager, object value) { object result = null; StringDictionary dictionary = value as StringDictionary; if (dictionary != null) { object context = manager.Context.Current; ExpressionContext exp = context as ExpressionContext; if (exp != null) { if (exp.Owner == value) { context = exp.Expression; } } // we can only serialize if we have a CodePropertyReferenceExpression CodePropertyReferenceExpression propRef = context as CodePropertyReferenceExpression; if (propRef != null) { // get the object with the property we're setting object targetObject = DeserializeExpression(manager, null, propRef.TargetObject); if (targetObject != null) { // get the PropertyDescriptor of the property we're setting PropertyDescriptor prop = TypeDescriptor.GetProperties(targetObject)[propRef.PropertyName]; if (prop != null) { // okay, we have the property and we have the StringDictionary, now we generate // a line like this (c# example): // myObject.strDictProp["key"] = "value"; // for each key/value pair in the StringDictionary CodeStatementCollection statements = new CodeStatementCollection(); CodeMethodReferenceExpression methodRef = new CodeMethodReferenceExpression(propRef, "Add"); foreach (DictionaryEntry entry in dictionary) { // serialize the key (in most languages this will look like "key") CodeExpression serializedKey = SerializeToExpression(manager, entry.Key); // serialize the value (in most languages this will look like "value") CodeExpression serializedValue = SerializeToExpression(manager, entry.Value); // serialize the method call (prop.Add("key", "value")) if (serializedKey != null && serializedValue != null) { CodeMethodInvokeExpression statement = new CodeMethodInvokeExpression(); statement.Method = methodRef; statement.Parameters.Add(serializedKey); statement.Parameters.Add(serializedValue); statements.Add(statement); } } result = statements; } } } } else { // 'value' is not a StringDictionary. What should we do? } return result; } } } // 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
- SamlDoNotCacheCondition.cs
- Tablet.cs
- BoundingRectTracker.cs
- SettingsAttributes.cs
- RoleManagerEventArgs.cs
- PresentationSource.cs
- SignatureDescription.cs
- MouseCaptureWithinProperty.cs
- PrintDocument.cs
- SizeAnimationBase.cs
- ipaddressinformationcollection.cs
- _ConnectStream.cs
- UserValidatedEventArgs.cs
- SoapFault.cs
- TrackingParameters.cs
- BeginEvent.cs
- DoubleLink.cs
- ConnectionManagementElementCollection.cs
- PerfCounterSection.cs
- BinaryObjectReader.cs
- ParserStreamGeometryContext.cs
- EpmCustomContentSerializer.cs
- Transform.cs
- DbConnectionStringCommon.cs
- BevelBitmapEffect.cs
- UnmanagedMarshal.cs
- Partitioner.cs
- PnrpPermission.cs
- OleDbConnectionFactory.cs
- RotationValidation.cs
- CreateParams.cs
- SqlXmlStorage.cs
- WCFBuildProvider.cs
- CodeStatementCollection.cs
- ReadOnlyHierarchicalDataSource.cs
- AncestorChangedEventArgs.cs
- ZipPackage.cs
- ExitEventArgs.cs
- DocumentViewer.cs
- CultureTableRecord.cs
- WindowsListViewItem.cs
- StandardOleMarshalObject.cs
- RegexRunnerFactory.cs
- RuntimeConfigurationRecord.cs
- DecoratedNameAttribute.cs
- Update.cs
- InvalidFilterCriteriaException.cs
- SmtpFailedRecipientsException.cs
- InputBindingCollection.cs
- ObjectDisposedException.cs
- DeflateStream.cs
- StringExpressionSet.cs
- EncodingTable.cs
- TemplateControlParser.cs
- FusionWrap.cs
- Logging.cs
- _AuthenticationState.cs
- TemplatedControlDesigner.cs
- Directory.cs
- Ref.cs
- GraphicsContext.cs
- WebCategoryAttribute.cs
- SqlUtil.cs
- WorkflowTimerService.cs
- CommandDevice.cs
- CallbackDebugElement.cs
- SmtpNegotiateAuthenticationModule.cs
- SemaphoreSecurity.cs
- SignedXml.cs
- TypeDescriptor.cs
- TdsParserSessionPool.cs
- Point.cs
- SymbolMethod.cs
- CapabilitiesRule.cs
- ToolStripRenderEventArgs.cs
- FormatterServices.cs
- TableLayout.cs
- TableDetailsRow.cs
- ResourceReferenceExpression.cs
- HttpServerUtilityWrapper.cs
- BindingWorker.cs
- WebReferencesBuildProvider.cs
- GeneralTransform3DGroup.cs
- FastPropertyAccessor.cs
- IndentedWriter.cs
- jithelpers.cs
- GridItemPatternIdentifiers.cs
- Style.cs
- PrivacyNoticeBindingElementImporter.cs
- DocumentApplicationState.cs
- SqlDataSourceCustomCommandEditor.cs
- StaticSiteMapProvider.cs
- ProfileInfo.cs
- SqlCacheDependencyDatabase.cs
- PartialArray.cs
- DefaultMemberAttribute.cs
- GridView.cs
- SQLRoleProvider.cs
- InteropBitmapSource.cs
- TagMapCollection.cs