Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Core.Presentation / System / ServiceModel / Activities / Presentation / TypeToTreeConverter.cs / 1305376 / TypeToTreeConverter.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.ServiceModel.Activities.Presentation { using System; using System.Globalization; using System.Linq; using System.Reflection; using System.Windows.Data; using System.Activities.Presentation.Model; using System.Collections; using System.Activities.Core.Presentation; using System.Xml; using System.Runtime.Serialization; using System.Xml.Serialization; sealed class TypeToTreeConverter : IValueConverter { object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) { Type type = null; if (value is ModelItem) { value = ((ModelItem)value).GetCurrentValue(); } if (value is Type) { type = (Type)value; } else if (value is PropertyInfo) { type = ((PropertyInfo)value).PropertyType; } else if (value is FieldInfo) { type = ((FieldInfo)value).FieldType; } //1) Dead-ends (not expand any more) // a. CLR built-in types // b. Byte array, DateTime, TimeSpan, GUID, Uri, XmlQualifiedName, XmlElement and XmlNode array [This includes XElement and XNode array from .NET 3.5] // c. Enums // d. Arrays and Collection classes including List, Dictionary and Hashtable(Anything that implements IEnumerable or IDictionary or is an array is treated as a collection) // e. Types marked with [CollectionDataContract] attribute //2) Show nothing (Xpath generator cannot generate XPath according to member info), but user should be able to manually input query string // a. Types that implement IXmlSerializable // b. Types that implement ISerializable. //3) Show all fields without [NonSerializable] regardless of visibility // a. Types marked with Serializable attribute //4) Show all [DataMembers] // a. Types marked with DataContract attribute //5) Show all public fields and properties without [IgnoreDataMember] // a. Types with none of the above attributes (POCO) but with a default constructor (can be non-public). // // //Priority of those interfaces or attributes: //IXmlSerializable -> ISerializable -> DataContract -> Serializable //Type cannot be Iserializable/IXmlSerializable and have DataContractAttribute attribute. IEnumerable result = null; if ((null != type) && (!ContentCorrelationTypeExpander.IsPrimitiveTypeInXPath(type))) { if (type.GetInterface("IXmlSerializable", false) != null) { result = null; } else if (type.GetInterface("ISerializable", false) != null) { result = null; } else if (type.GetCustomAttributes(typeof(DataContractAttribute), false).Length > 0) { result = type .GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(member => member.GetCustomAttributes(typeof(DataMemberAttribute), false).Length > 0) .OrderBy(member => member.Name); } else if (type.GetCustomAttributes(typeof(SerializableAttribute), false).Length > 0) { result = type .GetMembers(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public) .Where(member => member.MemberType == MemberTypes.Field && member.GetCustomAttributes(typeof(NonSerializedAttribute), false).Length == 0) .OrderBy(member => member.Name); } else if (type.GetConstructor(new Type[0] { }) != null) { result = type .GetMembers(BindingFlags.Instance | BindingFlags.Public) .Where(member => (member.MemberType == MemberTypes.Field || member.MemberType == MemberTypes.Property) && (member.GetCustomAttributes(typeof(IgnoreDataMemberAttribute), false).Length == 0)) .OrderBy(member => member.Name); } } return result; } object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw FxTrace.Exception.AsError(new NotSupportedException()); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RangeValidator.cs
- UmAlQuraCalendar.cs
- Int64Animation.cs
- MsmqDecodeHelper.cs
- ViewCellRelation.cs
- CompilerTypeWithParams.cs
- DataRowComparer.cs
- XmlTextReader.cs
- WorkflowTraceTransfer.cs
- XamlTreeBuilderBamlRecordWriter.cs
- PropertyKey.cs
- loginstatus.cs
- FlowDocumentPageViewerAutomationPeer.cs
- ObjectComplexPropertyMapping.cs
- DefaultExpressionVisitor.cs
- TextRunCache.cs
- RightsManagementPermission.cs
- CharAnimationBase.cs
- ProcessModelInfo.cs
- PasswordValidationException.cs
- LinearKeyFrames.cs
- WebServiceHostFactory.cs
- CodeAccessPermission.cs
- XmlWellformedWriter.cs
- DataGridTextBox.cs
- ScriptReferenceBase.cs
- SByte.cs
- TcpChannelHelper.cs
- ToolBarButton.cs
- Multiply.cs
- DefaultTextStoreTextComposition.cs
- Handle.cs
- MemberPathMap.cs
- WebControl.cs
- DesignerVerb.cs
- Enum.cs
- CompilerCollection.cs
- ExpressionCopier.cs
- LineProperties.cs
- SqlConnectionPoolProviderInfo.cs
- __TransparentProxy.cs
- HttpHandler.cs
- UInt64Storage.cs
- FunctionDescription.cs
- Error.cs
- CharEntityEncoderFallback.cs
- EdmComplexTypeAttribute.cs
- DeferredElementTreeState.cs
- SmtpFailedRecipientsException.cs
- XomlDesignerLoader.cs
- TextInfo.cs
- MultiBinding.cs
- CompressedStack.cs
- BitmapPalettes.cs
- HtmlAnchor.cs
- MenuItemBinding.cs
- MultiView.cs
- ForceCopyBuildProvider.cs
- XmlUTF8TextReader.cs
- BrowserCapabilitiesCompiler.cs
- SoapExtensionStream.cs
- SmiContextFactory.cs
- ListBox.cs
- SecurityAlgorithmSuite.cs
- AlphabeticalEnumConverter.cs
- XmlLinkedNode.cs
- SafeThreadHandle.cs
- StyleSelector.cs
- TextReader.cs
- FormParameter.cs
- ManipulationInertiaStartingEventArgs.cs
- WebColorConverter.cs
- TextFragmentEngine.cs
- StylusPointPropertyId.cs
- XmlNamespaceDeclarationsAttribute.cs
- BaseParaClient.cs
- Activity.cs
- RegexGroupCollection.cs
- EventArgs.cs
- AnnotationResource.cs
- DelegateTypeInfo.cs
- BaseProcessProtocolHandler.cs
- PersonalizationStateQuery.cs
- WebHttpSecurity.cs
- HTMLTextWriter.cs
- DefaultClaimSet.cs
- CapacityStreamGeometryContext.cs
- WSMessageEncoding.cs
- EdgeProfileValidation.cs
- DbProviderSpecificTypePropertyAttribute.cs
- DataGridDetailsPresenterAutomationPeer.cs
- HttpRequestWrapper.cs
- SafeHGlobalHandleCritical.cs
- XmlSchemaComplexContentExtension.cs
- DataGridBoolColumn.cs
- MachineSettingsSection.cs
- EntityDataSourceWrapper.cs
- HorizontalAlignConverter.cs
- TextRangeAdaptor.cs
- Graphics.cs