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
- SystemFonts.cs
- Code.cs
- DbProviderFactories.cs
- EditBehavior.cs
- BooleanFunctions.cs
- SendActivity.cs
- DigitShape.cs
- XdrBuilder.cs
- ManagementOptions.cs
- PaperSize.cs
- HwndSourceParameters.cs
- PropertyItemInternal.cs
- Type.cs
- Parsers.cs
- OrderedDictionary.cs
- BufferedGraphicsManager.cs
- AppliedDeviceFiltersEditor.cs
- OrthographicCamera.cs
- ChildDocumentBlock.cs
- DataTableClearEvent.cs
- ExceptionNotification.cs
- ServiceNameElement.cs
- UTF8Encoding.cs
- WebPermission.cs
- DeploymentExceptionMapper.cs
- ThrowHelper.cs
- DataStreams.cs
- ConfigPathUtility.cs
- SyndicationDeserializer.cs
- DebugManager.cs
- BinaryWriter.cs
- FormatException.cs
- PtsPage.cs
- Line.cs
- Interlocked.cs
- StringKeyFrameCollection.cs
- StringSorter.cs
- NoneExcludedImageIndexConverter.cs
- XmlWhitespace.cs
- documentsequencetextpointer.cs
- Pair.cs
- ProxyGenerator.cs
- XPathSingletonIterator.cs
- OrderedHashRepartitionEnumerator.cs
- ValidateNames.cs
- UIElementParaClient.cs
- WindowsToolbarAsMenu.cs
- FocusWithinProperty.cs
- SchemaSetCompiler.cs
- HttpHandlerAction.cs
- ImageDrawing.cs
- WebBrowserUriTypeConverter.cs
- CompilerTypeWithParams.cs
- UpdateCommandGenerator.cs
- DisposableCollectionWrapper.cs
- WebServiceResponseDesigner.cs
- TextEditorSpelling.cs
- ZipFileInfoCollection.cs
- MaterialCollection.cs
- ResourcesBuildProvider.cs
- TextSpan.cs
- WebConfigManager.cs
- MSG.cs
- WindowsRegion.cs
- ProxyHelper.cs
- RegisteredHiddenField.cs
- RemotingException.cs
- ColumnResult.cs
- NumberSubstitution.cs
- ToolStripDesignerAvailabilityAttribute.cs
- GridView.cs
- CacheChildrenQuery.cs
- DocumentPageView.cs
- AutoGeneratedField.cs
- DesignerSerializerAttribute.cs
- DataBoundControlActionList.cs
- ClientBuildManagerCallback.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- TextOnlyOutput.cs
- DBProviderConfigurationHandler.cs
- BrowserCapabilitiesFactory.cs
- PeerDuplexChannelListener.cs
- CapabilitiesRule.cs
- SystemIcons.cs
- ChameleonKey.cs
- PauseStoryboard.cs
- SqlBulkCopyColumnMapping.cs
- ExtendedPropertyDescriptor.cs
- FontDifferentiator.cs
- HttpsTransportElement.cs
- Models.cs
- CurrencyWrapper.cs
- DelayedRegex.cs
- Brush.cs
- BinaryOperationBinder.cs
- XsdDataContractImporter.cs
- Rotation3D.cs
- EntitySqlQueryCacheEntry.cs
- BaseDataBoundControl.cs
- ParameterCollection.cs