XNameTypeConverter.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / System.Runtime.DurableInstancing / System / Runtime / XNameTypeConverter.cs / 1305376 / XNameTypeConverter.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.Runtime 
{
    using System.ComponentModel; 
    using System.Diagnostics.CodeAnalysis; 
    using System.Globalization;
    using System.Runtime; 
    using System.Xaml;
    using System.Xml.Linq;

    internal static class XNameTypeConverterHelper 
    {
        public static bool CanConvertFrom(Type sourceType) 
        { 
            return sourceType == typeof(string);
        } 
        public static object ConvertFrom(ITypeDescriptorContext context, object value)
        {
            return XNameTypeConverterHelper.ConvertFromHelper(context, value);
        } 
        public static bool CanConvertTo(Type destinationType)
        { 
            return destinationType == typeof(string); 
        }
        public static object ConvertTo(ITypeDescriptorContext context, object value, Type destinationType) 
        {
            return XNameTypeConverterHelper.ConvertToHelper(context, value, destinationType);
        }
 
        internal static object ConvertFromHelper(ITypeDescriptorContext context, object value)
        { 
            if (value == null) 
            {
                return null; 
            }

            String stringValue = value as String;
            if (stringValue == null) 
            {
                return null; 
            } 

            stringValue = stringValue.Trim(); 
            if (stringValue == String.Empty)
            {
                return null;
            } 

            IXamlNamespaceResolver resolver = 
                context.GetService(typeof(IXamlNamespaceResolver)) as IXamlNamespaceResolver; 
            if (resolver == null)
            { 
                return null;
            }

            if (stringValue[0] == '{') 
            {
                return XName.Get(stringValue); 
            } 

            int indexOfColon = stringValue.IndexOf(':'); 
            string prefix, localName;
            if (indexOfColon >= 0)
            {
                prefix = stringValue.Substring(0, indexOfColon); 
                localName = stringValue.Substring(indexOfColon + 1);
            } 
            else 
            {
                prefix = string.Empty; 
                localName = stringValue;
            }

            string ns = resolver.GetNamespace(prefix); 
            if (ns == null)
            { 
                throw Fx.Exception.AsError(new FormatException(SRCore.CouldNotResolveNamespacePrefix(prefix))); 
            }
 
            return XName.Get(localName, ns);
        }

        internal static object ConvertToHelper(ITypeDescriptorContext context, object value, Type destinationType) 
        {
            XName name = value as XName; 
            if (destinationType == typeof(string) && name != null) 
            {
                if (context != null) 
                {
                    var lookupPrefix = (INamespacePrefixLookup)context.GetService(typeof(INamespacePrefixLookup));
                    if (lookupPrefix != null)
                    { 
                        string prefix = lookupPrefix.LookupPrefix(name.Namespace.NamespaceName);
                        if (String.IsNullOrEmpty(prefix)) 
                        { 
                            // Default namespace is in scope
                            // 
                            return name.LocalName;
                        }
                        else
                        { 
                            return prefix + ":" + name.LocalName;
                        } 
                    } 
                }
            } 
            return null;
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.Runtime 
{
    using System.ComponentModel; 
    using System.Diagnostics.CodeAnalysis; 
    using System.Globalization;
    using System.Runtime; 
    using System.Xaml;
    using System.Xml.Linq;

    internal static class XNameTypeConverterHelper 
    {
        public static bool CanConvertFrom(Type sourceType) 
        { 
            return sourceType == typeof(string);
        } 
        public static object ConvertFrom(ITypeDescriptorContext context, object value)
        {
            return XNameTypeConverterHelper.ConvertFromHelper(context, value);
        } 
        public static bool CanConvertTo(Type destinationType)
        { 
            return destinationType == typeof(string); 
        }
        public static object ConvertTo(ITypeDescriptorContext context, object value, Type destinationType) 
        {
            return XNameTypeConverterHelper.ConvertToHelper(context, value, destinationType);
        }
 
        internal static object ConvertFromHelper(ITypeDescriptorContext context, object value)
        { 
            if (value == null) 
            {
                return null; 
            }

            String stringValue = value as String;
            if (stringValue == null) 
            {
                return null; 
            } 

            stringValue = stringValue.Trim(); 
            if (stringValue == String.Empty)
            {
                return null;
            } 

            IXamlNamespaceResolver resolver = 
                context.GetService(typeof(IXamlNamespaceResolver)) as IXamlNamespaceResolver; 
            if (resolver == null)
            { 
                return null;
            }

            if (stringValue[0] == '{') 
            {
                return XName.Get(stringValue); 
            } 

            int indexOfColon = stringValue.IndexOf(':'); 
            string prefix, localName;
            if (indexOfColon >= 0)
            {
                prefix = stringValue.Substring(0, indexOfColon); 
                localName = stringValue.Substring(indexOfColon + 1);
            } 
            else 
            {
                prefix = string.Empty; 
                localName = stringValue;
            }

            string ns = resolver.GetNamespace(prefix); 
            if (ns == null)
            { 
                throw Fx.Exception.AsError(new FormatException(SRCore.CouldNotResolveNamespacePrefix(prefix))); 
            }
 
            return XName.Get(localName, ns);
        }

        internal static object ConvertToHelper(ITypeDescriptorContext context, object value, Type destinationType) 
        {
            XName name = value as XName; 
            if (destinationType == typeof(string) && name != null) 
            {
                if (context != null) 
                {
                    var lookupPrefix = (INamespacePrefixLookup)context.GetService(typeof(INamespacePrefixLookup));
                    if (lookupPrefix != null)
                    { 
                        string prefix = lookupPrefix.LookupPrefix(name.Namespace.NamespaceName);
                        if (String.IsNullOrEmpty(prefix)) 
                        { 
                            // Default namespace is in scope
                            // 
                            return name.LocalName;
                        }
                        else
                        { 
                            return prefix + ":" + name.LocalName;
                        } 
                    } 
                }
            } 
            return null;
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK