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
- DataTableMappingCollection.cs
- ExecutionTracker.cs
- ProgressBar.cs
- SerializerDescriptor.cs
- SafeNativeMethods.cs
- HttpCachePolicy.cs
- DelegateHelpers.cs
- EventLogPermissionEntryCollection.cs
- QilLoop.cs
- TextSpan.cs
- RootBuilder.cs
- SettingsContext.cs
- errorpatternmatcher.cs
- documentsequencetextcontainer.cs
- TypeValidationEventArgs.cs
- DefaultValueTypeConverter.cs
- WindowsGraphics2.cs
- FontCacheUtil.cs
- UnsafeNetInfoNativeMethods.cs
- CannotUnloadAppDomainException.cs
- ManualResetEvent.cs
- CompilationAssemblyInstallComponent.cs
- BaseCodeDomTreeGenerator.cs
- Label.cs
- ImageCollectionEditor.cs
- SqlProcedureAttribute.cs
- GradientStop.cs
- PlaceHolder.cs
- CqlIdentifiers.cs
- MergeFilterQuery.cs
- OpenTypeLayoutCache.cs
- LabelLiteral.cs
- Splitter.cs
- CodeGenerator.cs
- KeyEventArgs.cs
- OleDbConnectionInternal.cs
- DesignerCommandAdapter.cs
- VolatileResourceManager.cs
- ExpressionBuilder.cs
- ADMembershipProvider.cs
- Certificate.cs
- TextEditorTyping.cs
- COM2Properties.cs
- XmlSchemaObjectCollection.cs
- CollectionConverter.cs
- DefaultObjectMappingItemCollection.cs
- Properties.cs
- Message.cs
- EtwProvider.cs
- WsatTransactionFormatter.cs
- ExpressionValueEditor.cs
- ContextMenuStrip.cs
- CustomTrackingRecord.cs
- AssemblyUtil.cs
- Popup.cs
- wmiprovider.cs
- MetadataItemSerializer.cs
- PropertyGridCommands.cs
- UniqueConstraint.cs
- TextTreeDeleteContentUndoUnit.cs
- UseAttributeSetsAction.cs
- FixedSOMLineRanges.cs
- TextOutput.cs
- WebScriptMetadataFormatter.cs
- CustomSignedXml.cs
- Cursors.cs
- WebMethodAttribute.cs
- LinqDataSourceSelectEventArgs.cs
- OledbConnectionStringbuilder.cs
- RIPEMD160.cs
- RadioButtonDesigner.cs
- ExpressionBuilder.cs
- Rotation3DAnimationBase.cs
- TextEndOfLine.cs
- SplineKeyFrames.cs
- DelegatingHeader.cs
- SID.cs
- JsonWriter.cs
- ConfigurationProperty.cs
- GridViewUpdateEventArgs.cs
- CodeComment.cs
- Main.cs
- HttpPostServerProtocol.cs
- HitTestResult.cs
- EDesignUtil.cs
- WinEventQueueItem.cs
- ScaleTransform.cs
- WhitespaceRule.cs
- BindingObserver.cs
- TreeNodeSelectionProcessor.cs
- FontResourceCache.cs
- PieceDirectory.cs
- KnownBoxes.cs
- LinqDataSourceEditData.cs
- TextStore.cs
- FileDialogCustomPlacesCollection.cs
- TripleDES.cs
- Semaphore.cs
- XmlSchemaAny.cs
- PackageProperties.cs