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
- Properties.cs
- GroupedContextMenuStrip.cs
- OneOf.cs
- StatusBarItemAutomationPeer.cs
- XPathNavigatorKeyComparer.cs
- WinEventQueueItem.cs
- SemanticBasicElement.cs
- SocketCache.cs
- DropSourceBehavior.cs
- Int32Collection.cs
- TextServicesDisplayAttributePropertyRanges.cs
- SmiSettersStream.cs
- AssemblySettingAttributes.cs
- DataControlImageButton.cs
- XamlSerializationHelper.cs
- FocusManager.cs
- ToolTip.cs
- HelpKeywordAttribute.cs
- ProcessInfo.cs
- EpmSourcePathSegment.cs
- Int32Rect.cs
- TypedTableBase.cs
- StringInfo.cs
- HighlightComponent.cs
- GlyphingCache.cs
- ITreeGenerator.cs
- DynamicQueryableWrapper.cs
- ExceptionUtil.cs
- RelatedCurrencyManager.cs
- HashAlgorithm.cs
- CacheOutputQuery.cs
- RoleBoolean.cs
- DocobjHost.cs
- DefaultProxySection.cs
- GlyphManager.cs
- Bits.cs
- UIElement.cs
- DataGridViewRowPostPaintEventArgs.cs
- CalendarData.cs
- HtmlTableRow.cs
- RegistrySecurity.cs
- ProfileService.cs
- ProxyElement.cs
- ResourceExpression.cs
- Properties.cs
- ClientFormsIdentity.cs
- MimeBasePart.cs
- SiteMapSection.cs
- HttpPostProtocolReflector.cs
- AdPostCacheSubstitution.cs
- Base64Stream.cs
- RegisteredScript.cs
- Encoding.cs
- TemplateControl.cs
- TreeBuilder.cs
- Validator.cs
- Base64Decoder.cs
- WebPartCancelEventArgs.cs
- RawKeyboardInputReport.cs
- TableCell.cs
- EventLogger.cs
- TextSchema.cs
- PseudoWebRequest.cs
- XmlSerializerObjectSerializer.cs
- LoggedException.cs
- FixUpCollection.cs
- RayMeshGeometry3DHitTestResult.cs
- XsltCompileContext.cs
- OrderedDictionary.cs
- FileUpload.cs
- XPathMultyIterator.cs
- VarRemapper.cs
- EmptyStringExpandableObjectConverter.cs
- EntityClientCacheKey.cs
- CodeTypeOfExpression.cs
- ProxySimple.cs
- COM2IDispatchConverter.cs
- TimeoutValidationAttribute.cs
- AssemblyBuilderData.cs
- AdapterUtil.cs
- precedingsibling.cs
- TypeBuilderInstantiation.cs
- CustomErrorsSection.cs
- IDQuery.cs
- XamlGridLengthSerializer.cs
- HtmlFormParameterReader.cs
- ReflectionHelper.cs
- WebPartConnectionsEventArgs.cs
- InProcStateClientManager.cs
- PackageFilter.cs
- DockPattern.cs
- CodeCommentStatement.cs
- StrokeNodeEnumerator.cs
- ControlPersister.cs
- FormsAuthenticationCredentials.cs
- BamlReader.cs
- basevalidator.cs
- ImageCodecInfo.cs
- IPGlobalProperties.cs
- DataFormats.cs