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
- XamlVector3DCollectionSerializer.cs
- DiagnosticsConfiguration.cs
- LinkClickEvent.cs
- X509SecurityTokenProvider.cs
- RenderOptions.cs
- SqlWorkflowPersistenceService.cs
- Vector3dCollection.cs
- DNS.cs
- XmlWrappingReader.cs
- ToolStripDropDownClosedEventArgs.cs
- QuaternionKeyFrameCollection.cs
- ConstructorExpr.cs
- PackageFilter.cs
- PolygonHotSpot.cs
- ExceptionTranslationTable.cs
- DataGridViewCellLinkedList.cs
- WorkflowApplicationException.cs
- ListenerElementsCollection.cs
- Block.cs
- CacheEntry.cs
- TextServicesCompartmentContext.cs
- DataObjectCopyingEventArgs.cs
- ManipulationStartedEventArgs.cs
- UpdateException.cs
- WebHttpBindingCollectionElement.cs
- PageEventArgs.cs
- MemoryPressure.cs
- GridLengthConverter.cs
- SchemaInfo.cs
- TransactedBatchingBehavior.cs
- _ConnectStream.cs
- returneventsaver.cs
- DataSpaceManager.cs
- RecordBuilder.cs
- QilInvokeLateBound.cs
- CopyNamespacesAction.cs
- DesignerLoader.cs
- WindowsAltTab.cs
- LoginView.cs
- ScrollEventArgs.cs
- CorrelationQueryBehavior.cs
- RawStylusInput.cs
- CallContext.cs
- TableLayoutCellPaintEventArgs.cs
- SyndicationDeserializer.cs
- Thumb.cs
- SqlLiftIndependentRowExpressions.cs
- ListBindableAttribute.cs
- TreeSet.cs
- TreeViewImageGenerator.cs
- XmlAttributeProperties.cs
- ReversePositionQuery.cs
- VirtualPathUtility.cs
- Encoder.cs
- XmlCharacterData.cs
- COAUTHINFO.cs
- DrawingCollection.cs
- cryptoapiTransform.cs
- NamedServiceModelExtensionCollectionElement.cs
- LinqToSqlWrapper.cs
- NameValuePair.cs
- FileChangesMonitor.cs
- Stylesheet.cs
- ObjectListItemCollection.cs
- ObjectHelper.cs
- AppSecurityManager.cs
- ResourceDictionaryCollection.cs
- CompiledIdentityConstraint.cs
- NonClientArea.cs
- UniqueCodeIdentifierScope.cs
- Transactions.cs
- OverlappedAsyncResult.cs
- HttpApplication.cs
- SoapReflector.cs
- _SSPIWrapper.cs
- GenericPrincipal.cs
- SplineKeyFrames.cs
- PrintDialog.cs
- BorderGapMaskConverter.cs
- CommentEmitter.cs
- SymmetricKey.cs
- TypeListConverter.cs
- ValueSerializer.cs
- FixedSOMImage.cs
- UrlMappingsModule.cs
- WeakReference.cs
- HttpUnhandledOperationInvoker.cs
- XmlSignatureManifest.cs
- Mappings.cs
- ClonableStack.cs
- NewExpression.cs
- BindingParameterCollection.cs
- IndexedEnumerable.cs
- BaseProcessor.cs
- ToolStripDesigner.cs
- TabletDeviceInfo.cs
- FrameAutomationPeer.cs
- PropertyChangedEventArgs.cs
- _ConnectOverlappedAsyncResult.cs
- ScrollBar.cs