Code:
/ FX-1434 / FX-1434 / 1.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
- webproxy.cs
- RootNamespaceAttribute.cs
- StorageEntitySetMapping.cs
- ProfileManager.cs
- IMembershipProvider.cs
- mansign.cs
- Int64.cs
- MobileControlsSectionHelper.cs
- DeclaredTypeElementCollection.cs
- DataGridCaption.cs
- FileCodeGroup.cs
- DataGridViewComboBoxColumn.cs
- XmlSchemaSimpleTypeList.cs
- Frame.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- ListBox.cs
- ActivationArguments.cs
- BorderGapMaskConverter.cs
- DataGridViewBindingCompleteEventArgs.cs
- HttpDebugHandler.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- ServerValidateEventArgs.cs
- ParserOptions.cs
- TemplateInstanceAttribute.cs
- BitmapScalingModeValidation.cs
- SQLInt16Storage.cs
- BaseTransportHeaders.cs
- StateBag.cs
- ListBoxAutomationPeer.cs
- XmlSerializationGeneratedCode.cs
- IPPacketInformation.cs
- Automation.cs
- RectangleHotSpot.cs
- XXXInfos.cs
- XamlStyleSerializer.cs
- UserPrincipalNameElement.cs
- LayoutDump.cs
- AutoResetEvent.cs
- OdbcReferenceCollection.cs
- GenericArgumentsUpdater.cs
- CopyOfAction.cs
- PointCollection.cs
- CodeExpressionStatement.cs
- ThreadExceptionEvent.cs
- InheritedPropertyChangedEventArgs.cs
- DiscoveryMessageSequence11.cs
- AffineTransform3D.cs
- TokenFactoryCredential.cs
- DataBindingCollectionConverter.cs
- FrameworkRichTextComposition.cs
- UserMapPath.cs
- ChangeDirector.cs
- TemplateBindingExpressionConverter.cs
- CompilerTypeWithParams.cs
- Select.cs
- Helpers.cs
- AuthorizationRule.cs
- DataGridViewCellCollection.cs
- Int64KeyFrameCollection.cs
- odbcmetadatafactory.cs
- EdmMember.cs
- TreeNodeCollection.cs
- FixedSOMSemanticBox.cs
- ColorConvertedBitmap.cs
- ViewGenerator.cs
- BinHexEncoding.cs
- ScrollProperties.cs
- _ProxyChain.cs
- CodeSubDirectoriesCollection.cs
- FormsAuthenticationUser.cs
- EntityDataSourceView.cs
- Ipv6Element.cs
- EventLogPermission.cs
- DataMisalignedException.cs
- ThemeDictionaryExtension.cs
- ImageKeyConverter.cs
- XmlChildNodes.cs
- __ComObject.cs
- VisualTreeUtils.cs
- HttpCachePolicyElement.cs
- ApplicationInterop.cs
- ManifestBasedResourceGroveler.cs
- Scheduler.cs
- PathFigure.cs
- GridSplitterAutomationPeer.cs
- DataObject.cs
- CompoundFileDeflateTransform.cs
- XamlStyleSerializer.cs
- CubicEase.cs
- ColorTransformHelper.cs
- DbCommandDefinition.cs
- PropertyMappingExceptionEventArgs.cs
- RsaSecurityTokenAuthenticator.cs
- glyphs.cs
- keycontainerpermission.cs
- ObjectStateEntryDbDataRecord.cs
- CustomErrorsSection.cs
- TextTreeExtractElementUndoUnit.cs
- XamlGridLengthSerializer.cs
- WebPartConnectionsConnectVerb.cs