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
- Util.cs
- Encoding.cs
- MenuItem.cs
- MultiAsyncResult.cs
- DataGrid.cs
- Range.cs
- AspNetHostingPermission.cs
- WebPartCancelEventArgs.cs
- WebPartDisplayMode.cs
- HtmlTableCell.cs
- RSAOAEPKeyExchangeFormatter.cs
- ZoneButton.cs
- HtmlTitle.cs
- SHA256Managed.cs
- AssemblyCollection.cs
- _AuthenticationState.cs
- ElapsedEventArgs.cs
- BypassElementCollection.cs
- TreeNode.cs
- SectionXmlInfo.cs
- DataKeyCollection.cs
- WebPartExportVerb.cs
- AdRotator.cs
- SimpleHandlerBuildProvider.cs
- CookielessHelper.cs
- CreateUserErrorEventArgs.cs
- ReflectionPermission.cs
- SystemNetworkInterface.cs
- GroupByExpressionRewriter.cs
- MatrixTransform.cs
- SymmetricKeyWrap.cs
- EventLogStatus.cs
- HashHelper.cs
- ObservableCollection.cs
- ProjectedSlot.cs
- XmlQueryRuntime.cs
- localization.cs
- TreeViewHitTestInfo.cs
- TableLayoutPanel.cs
- SecureStringHasher.cs
- RawMouseInputReport.cs
- DocumentApplication.cs
- TextBlockAutomationPeer.cs
- ClientUriBehavior.cs
- DigestTraceRecordHelper.cs
- LazyInitializer.cs
- CatalogZoneAutoFormat.cs
- ExecutionEngineException.cs
- XmlTextAttribute.cs
- CalendarButtonAutomationPeer.cs
- PropertySegmentSerializationProvider.cs
- BuildProviderCollection.cs
- RouteValueExpressionBuilder.cs
- BridgeDataReader.cs
- MSHTMLHostUtil.cs
- LicFileLicenseProvider.cs
- Light.cs
- QueryOptionExpression.cs
- VisualStyleInformation.cs
- CodeGotoStatement.cs
- SmtpDateTime.cs
- UTF8Encoding.cs
- TextLine.cs
- PictureBoxDesigner.cs
- SoapIncludeAttribute.cs
- SingleKeyFrameCollection.cs
- TypeToken.cs
- DataGridColumnCollectionEditor.cs
- DataGridViewSelectedCellCollection.cs
- FontNamesConverter.cs
- StyleHelper.cs
- RemoteWebConfigurationHost.cs
- MouseEventArgs.cs
- DrawingImage.cs
- LinqDataSourceInsertEventArgs.cs
- SqlDataSourceConfigureFilterForm.cs
- ListManagerBindingsCollection.cs
- ImageAttributes.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- ComponentChangingEvent.cs
- RegistryPermission.cs
- CompilerResults.cs
- TransactionBehavior.cs
- HitTestWithPointDrawingContextWalker.cs
- CompoundFileStorageReference.cs
- DataObjectEventArgs.cs
- WeakEventTable.cs
- XDeferredAxisSource.cs
- CompilationSection.cs
- MenuAutomationPeer.cs
- ValueQuery.cs
- GridViewDeletedEventArgs.cs
- SqlTriggerContext.cs
- ColumnResizeAdorner.cs
- SignatureToken.cs
- MouseCaptureWithinProperty.cs
- KeyboardNavigation.cs
- ToolBar.cs
- KeysConverter.cs